Android 8.0 安装APK

因为8.0添加了新的安全措施,不允许应用内安装未经过Google play验证的应用,但是又有更新应用的需求

那么首先要加入权限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
添加provider
<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>
在resources文件夹中添加一个xml文件夹,名字对应file_paths,在file_paths中添加
<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


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值