最近項(xiàng)目Android編譯版本改為targetSdkVersion26, 之前隱藏的版本問題暴露出來, 尤其是文件第三方打開及Apk更新問題,這里記錄下7.0以后文件相關(guān)問題
問題描述:
安裝apk的代碼一般寫法如下,網(wǎng)上隨處可以搜到:
public?static?void?installApk(Context?context,?File?file)?{? Intent?intent?=?new?Intent(Intent.ACTION_VIEW);??????Uri?data?=?Uri.fromFile(file);??????intent.setDataAndType(data,?"application/vnd.android.package-archive");??????context.startActivity(intent);??}??
然而,當(dāng)我們?cè)贏ndroid7.0手機(jī)中執(zhí)行時(shí),會(huì)發(fā)現(xiàn)報(bào)如下錯(cuò)誤日志
Caused?by:?android.os.FileUriExposedException:?file:///storage/emulated/0/Android/data/net.csdn.blog.ruancoder/cache/test.apk?exposed?beyond?app?through?Intent.getData()?????at?android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)?????at?android.net.Uri.checkFileUriExposed(Uri.java:2346)?????at?android.content.Intent.prepareToLeaveProcess(Intent.java:8933)?????at?android.content.Intent.prepareToLeaveProcess(Intent.java:8894)?????at?android.app.Instrumentation.execStartActivity(Instrumentation.java:1517)?????at?android.app.Activity.startActivityForResult(Activity.java:4224)?????at?android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)?????at?android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)?????at?android.app.Activity.startActivityForResult(Activity.java:4183)?????at?android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)?????at?android.app.Activity.startActivity(Activity.java:4507)?????at?android.app.Activity.startActivity(Activity.java:4475)??