2010-08-25 55 views
5

Tôi có một ứng dụng mà tôi muốn thêm chức năng tự động cập nhật (không có trong thị trường). Tôi có tất cả các mã tại chỗ sẽ kiểm tra xem có bản cập nhật nào không và sau đó tôi gọi một cái gì đó như thế này:Android: cách mở tệp APK sau khi tải xuống để tự động cập nhật?

Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse(Configuration.APK_URL)); 
c.startActivity(intent); 

bắt đầu tải xuống tệp. Có một cách mà tôi có thể lập trình nói với nó để "mở" các tập tin để bắt đầu quá trình cài đặt mà không cần người dùng phải đi đến tải về và nhấp vào nó?

Trả lời

6

này sẽ bắt đầu quá trình cài đặt

File apkFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/packageName.apk"); 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive"); 
startActivity(intent); 
+0

này sẽ không có tác dụng nữa, nếu mục tiêu ứng dụng của bạn API 24 trở lên. Xem câu trả lời của tôi bên dưới –

4

Câu trả lời ở trên là dành cho pre-API-24.

Nếu mục tiêu ứng dụng của bạn API 24 trở lên (và cần), bạn cần phải sử dụng cái gì khác (nếu không bạn có được FileUriExposedException, như mô tả here):

File apkFile = new File(...); 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    Uri fileUri = android.support.v4.content.FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", apkFile); 
    intent.setDataAndType(fileUri, "application/vnd.android.package-archive"); 
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    startActivity(intent); 

provider_paths.xml:

<?xml version="1.0" encoding="utf-8"?> 
<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!--<external-path name="external_files" path="."/>--> 
    <external-path path="Android/data/YOUR_PACKAGE_NAME" name="files_root" /> 
    <external-path path="." name="external_storage_root" /> 
</paths> 

trong đó YOUR_PACKAGE_NAME là tên gói ứng dụng của bạn.

manifest:

<provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="${applicationId}.provider" 
     android:exported="false" 
     android:grantUriPermissions="true"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/provider_paths"/> 
    </provider> 
Các vấn đề liên quan