Android8.0 允許安裝未知來源許可權(一)
阿新 • • 發佈:2018-12-03
一. 簡介
在Android8.0之前的系統中,使用者要從除官方應用商店之外的來源安裝App時,需要開啟系統設定當中的”允許未知來源”安裝應用程式的選項,在最新的Android O當中谷歌已經刪除了該永久授權的選項,從系統設定當中已經找不到該開關。谷歌將永久授權修改為每次的單獨授權,當用戶每次安裝第三方來源的android軟體時需要對軟體許可權進行手動確認。
二. 影響
當你的應用適配到8.0後,除了從Google play外的其他渠道安裝應用都會被阻塞,如果不處理好安裝未知來源的適配許可權。可能會導致應用無法升級,只能解除安裝後重新下載新版本。
三. 適配步驟
步驟一.在AndroidManifest.xml中增加請求安裝的許可權
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
步驟二.在安裝apk之前進行判斷是否已經打開了該許可權
使用到新增加的API canRequestPackageInstalls() 判斷是否已經開啟許可權,如果沒有開啟許可權就引導使用者去手動開啟,因為這個許可權不是執行時許可權,不能在程式碼中請求開啟。如果使用者已經打開了該許可權,那麼就直接安裝apk
boolean haveInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();
if (!haveInstallPermission){
//許可權沒有開啟則提示使用者去手動開啟
}
步驟三.跳轉到開啟許可權介面
Uri packageURI = Uri.parse("package:"+mContext.getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
startActivityForResult(intent, INSTALL_PERMISS_CODE);
步驟四 .在許可權成功開啟返回後,在onActivityResult中做處理,安裝apk
if (resultCode == RESULT_OK && requestCode == INSTALL_PERMISS_CODE) {
installApk();
}
四. 程式碼示例
/**
* 8.0以上系統設定安裝未知來源許可權
*/
public void setInstallPermission(){
boolean haveInstallPermission;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
//先判斷是否有安裝未知來源應用的許可權
haveInstallPermission = getPackageManager().canRequestPackageInstalls();
if(!haveInstallPermission){
//彈框提示使用者手動開啟
MessageDialog.showAlert(this, "安裝許可權", "需要開啟允許來自此來源,請去設定中開啟此許可權", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//此方法需要API>=26才能使用
toInstallPermissionSettingIntent();
}
}
});
return;
}
}
}
/**
* 開啟安裝未知來源許可權
*/
@RequiresApi(api = Build.VERSION_CODES.O)
private void toInstallPermissionSettingIntent() {
Uri packageURI = Uri.parse("package:"+getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
startActivityForResult(intent, INSTALL_PERMISS_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == INSTALL_PERMISS_CODE) {
Toast.makeText(this,"安裝應用",Toast.LENGTH_SHORT).show();
}
}
/**
* alert 訊息提示框顯示
* @param context 上下文
* @param title 標題
* @param message 訊息
* @param listener 監聽器
*/
public static void showAlert(Context context, String title, String message, OnClickListener listener){
Builder builder = new Builder(context);
builder.setTitle(title);
builder.setMessage(message);
builder.setPositiveButton("確定", listener);
builder.setCancelable(false);
builder.setIcon(R.mipmap.ic_launcher);
AlertDialog dialog = builder.create();
dialog.show();
}
五.Gif展示
六.總結
本文主要介紹了android8 為什麼要適配允許安裝未知來源許可權,以及怎麼去適配,希望大家都能少走點坑,能更簡單的開發,愉快的生活。