Android 8.0 安裝APK
阿新 • • 發佈:2019-01-23
因為8.0添加了新的安全措施,不允許應用內安裝未經過Google play驗證的應用,但是又有更新應用的需求
那麼首先要加入許可權
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
新增provider在resources資料夾中新增一個xml資料夾,名字對應file_paths,在file_paths中新增<manifest> ... <application> ... <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.mydomain.fileprovider" android:exported="false" android:grantUriPermissions="true"> ... </provider> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </application> </manifest>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_storage_root" path="." />
</paths>
path="."其實是對應外接SD卡的根目錄
原文在此:https://developer.android.com/reference/android/support/v4/content/FileProvider.html
判斷是否有許可權
val REQUEST_INSTALL_PACKAGES = 3
override fun onCreate(savedInstanceState: Bundle?) {
...
requestPermission(Manifest.permission.REQUEST_INSTALL_PACKAGES, REQUEST_INSTALL_PACKAGES)
...
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { when (requestCode) { REQUEST_INSTALL_PACKAGES->startActivity(Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES)) } super.onRequestPermissionsResult(requestCode, permissions, grantResults) }
protected fun requestPermission(permission: String, requestCode: Int) {
if (if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED || !packageManager.canRequestPackageInstalls()
} else {
ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED
}) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
ActivityCompat.requestPermissions(this, arrayOf(permission), requestCode)
} else {
ActivityCompat.requestPermissions(this, arrayOf(permission), requestCode)
}
} else {
//直接執行操作
when (requestCode) {
REQUEST_INSTALL_PACKAGES -> //執行安裝操作
}
}
}
packageManager.canRequestPackageInstalls()這一行用於判斷是否已經獲取到允許安裝未知應用,返回值Boolean