2014-11-14 35 views
22

Chúng tôi đang viết một ứng dụng Android hiển thị quảng cáo trên màn hình lớn. Chúng tôi có một chương trình phụ trợ nơi nhà quảng cáo có thể chọn quảng cáo, vì vậy chúng được cập nhật gần như ngay lập tức. Vì sẽ có rất nhiều hộp Android đang chạy (được cắm vào màn hình HDMI), chúng tôi có thể cập nhật phần mềm của mình từ xa.Cài đặt Android APK mà không cần nhắc

Đây là trường hợp:

ứng dụng chính được chạy liên tục (trừ khi tắt) và người sử dụng không bao giờ nhìn thấy bất cứ điều gì liên quan đến Android. Chúng tôi cần một ứng dụng cập nhật mà lắng nghe các bản cập nhật và xóa apk chính, cài đặt một gói ứng dụng mới. Trong khi cập nhật, chúng tôi sẽ hiển thị hoạt động với "Đang cập nhật, vui lòng đợi", cho đến khi APK chính mới được cài đặt và hiển thị.

gì chúng ta cần:

Chúng tôi cần sự giúp đỡ về cách thực hiện các cơ chế cập nhật mà không nhắc người dùng trên DEVICE bắt rễ.

gì chúng ta có:

Ứng dụng cập nhật được nối vào sự kiện khởi động nhận được, nơi một dịch vụ bắt đầu (dịch vụ này sẽ lắng nghe các bản cập nhật, sẽ được thực hiện bởi một đồng nghiệp sớm). Dịch vụ có thể bắt đầu một hoạt động sẽ nhắc cập nhật thông tin trong khi cập nhật.

Trong hoạt động updater

try { 
      Process proc = Runtime.getRuntime().exec(new String[]{"su", "pm install -r /mnt/sdcard/MYFOLDER/testAPK.apk"}); 
      stringBuilder.append(String.valueOf(proc.waitFor())); 
      stringBuilder.append("\n"); 
     } catch (Exception e) { 
      if (e instanceof IOException) { 
       Log.d(TAG, "IOException"); 
      } else if (e instanceof InterruptedException) { 
       Log.d(TAG, "InterruptedException"); 
      } else { 
       e.printStackTrace(); 
      } 
     } 

Các StringBuilder in 11, nhưng cũng làm như vậy nếu tôi đưa ra lệnh unexisting ngẫu nhiên ..

Trong Manifest

<!-- Permission to start UpdaterService on boot --> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

<!-- Install/delete permissions, only granted to system apps --> 
<uses-permission android:name="android.permission.INSTALL_PACKAGES" /> 
<uses-permission android:name="android.permission.DELETE_PACKAGES" /> 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Các gói cài đặt và xóa các gói là vô ích nếu tôi không cài đặt ứng dụng của tôi như sy ứng dụng gốc, tôi có đúng không?

Câu chuyện dài ngắn, không cài đặt APK thử nghiệm của tôi và tôi không biết cách giải quyết vấn đề này. Bất kỳ trợ giúp nào sẽ được đánh giá cao!

+1

nếu bạn làm có quyền truy cập root, đặt ứng dụng cập nhật trong/system/app/và bạn sẽ nhận được INSTALL_PACKAGES và DELETE_PACKAGES quyền – nandeesh

Trả lời

25

Bạn chỉ cần sử dụng lệnh adb install để cài đặt/cập nhật APK một cách âm thầm. Mẫu mã dưới

public static void InstallAPK(String filename){ 
    File file = new File(filename); 
    if(file.exists()){ 
     try { 
      String command; 
      command = "adb install -r " + filename; 
      Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command }); 
      proc.waitFor(); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 
    } 

HOẶC

Vui lòng kiểm tra http://paulononaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/

+0

Bạn nhận được lớp StringUtil ở đâu? – TomCB

+0

kiểm tra câu trả lời cập nhật của tôi – Palak

+7

Nó hoạt động, tôi đã sử dụng "pm install" thay vì "adb install"! Cảm ơn! – TomCB

Các vấn đề liên quan