android 8不明なソースappインストール

7833 ワード

android 8不明なソースappインストール
Android8.0の多くの新しいプロパティには、不明なソースアプリケーション権限という非常に重要なプロパティがあります.
以前は不明なソースアプリケーションをインストールするときにポップアップウィンドウがポップアップされ、ユーザーが許可または拒否を設定し、許可に設定した後、すべての不明なソースアプリケーションをインストールすることができます.
Android8.0の変化は、未知のアプリケーションのインストール権限のスイッチが除去され、代わりに未知のソースアプリケーションの管理リストが削除され、各アプリケーションの未知のソースのインストール権限が開く必要があることです.Googleは、最初からまともなアプリケーションがアップグレードを通じて不法なことをし、ユーザーの権益を侵害することを防止するためだ.あなたのアプリケーションがAndroid 8に直接適していると、内部起動アプリケーションのインストールがブロックされ、この未知のソースの権限を処理しないと、アプリケーションが更新できず、アプリケーション市場で再ダウンロードするしかありません. 
適切なandroid 8.0:
1.インベントリファイルに権限を追加する必要があります.
2、私たちはまたコードの中で権限を処理する必要があります.まずcanRequestPackageInstalls()方法であなたのアプリケーションにこの権限があるかどうかを判断します.
3、具体的な操作は:dialogをポップアップし、ユーザーに知らせる
“              ,         ”
次に、ユーザーは「OK」をクリックし、不明なソースアプリケーション権限管理リストにジャンプします.
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
startActivityForResult(intent, 10086);
次に、onActivity Resultで結果を受信します.
if (resultCode == RESULT_OK && requestCode == 10086) {
    installProcess();//
}
完全なプロセスは次のとおりです.
  //       
    private void installProcess() {
        boolean haveInstallPermission;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            //                 
            haveInstallPermission = getPackageManager().canRequestPackageInstalls();
            if (!haveInstallPermission) {//    
                DialogUtils.showDialog(this, "              ,         ", 
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                            startInstallPermissionSettingActivity();
                        }
                    }
                }, null);
                return;
            }
        }
        //
        installApk(apk);
    }


    @RequiresApi(api = Build.VERSION_CODES.O)
    private void startInstallPermissionSettingActivity() {
        Uri packageURI = Uri.parse("package:" + getPackageName());
        //     8.0 API
        Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
        startActivityForResult(intent, 10086);
    }

    //    
    private void installApk(File apk) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
            intent.setDataAndType(Uri.fromFile(apk), "application/vnd.android.package-archive");
        } else {//Android7.0    uri  contentProvider
            Uri uri = AppCommonUtils.getUriFromFile(getBaseContext(), apk);
            intent.setDataAndType(uri, "application/vnd.android.package-archive");
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        }

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        getBaseContext().startActivity(intent);
    }
または
    public void checkPermission(){
        boolean haveInstallPermission;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            haveInstallPermission = getPackageManager().canRequestPackageInstalls();
            if(!haveInstallPermission){
                //
                Uri packageURI = Uri.parse("package:" + getPackageName());
                Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
                startActivityForResult(intent, 10086);
            }else{
 
                //   ,       ;
               
            }
        }else{
            //  android  ,          ;
           
        }
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
 
        if (resultCode == RESULT_OK && requestCode == 10086) {
            //     ,       ;
            
        }
    }
 
posted @
2019-01-24 09:31 YOUNG++読書(
...) コメント(
...) コレクションの編集