背景
Android 10 華為P30 pro手機
從伺服器下載下傳apk安裝包的時候報錯open failed: EACCES (Permission denied)
解決方法
注意這句話: android:requestLegacyExternalStorage="true"
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
此時可以正常下載下傳檔案之後,即可安裝:
<!--安裝下載下傳好的安裝包-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
// 擷取檔案下載下傳路徑
val apkFile = File(filePath)
val intent = Intent(Intent.ACTION_VIEW)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
val contentUri: Uri = FileProvider.getUriForFile(
this@MainActivity,
"com.ly.checkticket4hengqin",
apkFile
)
intent.setDataAndType(contentUri, "application/vnd.android.package-archive")
} else {
intent.setDataAndType(
Uri.fromFile(apkFile),
"application/vnd.android.package-archive"
)
}
startActivity(intent)
最後manifest.xml裡面也要對應起來:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.ly.checkticket4hengqin"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
打完收工。