2016-12-28 176 views
1

我的代码:的Android 7.0:安装apk文件

public static void installApk(Context context, File apkFile) { 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     Uri uri = null; 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
      uri = FileProvider.getUriForFile(context, 
     context.getApplicationContext().getPackageName() + ".provider", apkFile); 

      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); 
     } else { 
      uri = Uri.fromFile(apkFile); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     } 
     intent.setDataAndType(uri, "application/vnd.android.package-archive"); 
     context.startActivity(intent); 

    } 

apkFile路径:

/storage/emulated/0/Download/com.me.myapp-1.0.1 apk文件

获取乌里:

content://com.me.myapp.provider/publicDir/Download/com.me.myapp-1.0.1.apk 

错误我没有得到消息。

回答

1

该错误由我的小小忽略创建。

1清单中添加代码

<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> 

2 RES/XML/provider_paths.xml

<?xml version="1.0" encoding="utf-8"?> 
    <paths> 
     <external-path 
      name="publicDir" path="/"/> 
    </paths> 

3安装

public static void installApk(Context context, File apkFile) { 

    Intent intent = new Intent(Intent.ACTION_VIEW); 
    Uri uri = null; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
     uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", apkFile); 
     intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); 
     intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    } else { 
     uri = Uri.fromFile(apkFile); 
    } 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.setDataAndType(uri, "application/vnd.android.package-archive"); 
    context.startActivity(intent); 
} 

你需要这个网址

https://developer.android.com/reference/android/os/FileUriExposedException.html

https://developer.android.com/reference/android/support/v4/content/FileProvider.html

代码解决我的问题。希望能帮到你