Android Nおよび以上のバージョンのアプリケーションインストールパッケージのダウンロードによる自動ポップアップインストールインタフェースの適合方法


Android Nおよび以上のバージョンのアプリケーションインストールパッケージのダウンロードによる自動ポップアップインストールインタフェースの適合方法
  アプリのダウンロードとインストール機能を実現する際、Androidの上位バージョンでは次のような問題が発生する可能性があります.
  • インストールApk時報エラー:android.os.FileUriExposedException: file:///storage/emulated/0/Download/*.apk exposed beyond app through Intent.getData();
  • インストールインタフェースが弾けません.

  • 上記の2つの問題は主にAndroid 8.0が未知のソースアプリケーションに対して権限制限を行い、この問題の解決と完全な適合方法は以下の通りである.
    完全適合手順
    1、Android 8.0以上のシステムに適しており、Android Manifestである必要がある.xmlにインストール権限を追加するには、次の手順に従います.
    
    

      Android OおよびAndroid 8.0以上のシステムがこの権限を付与しないと、インストールインタフェースにジャンプしたときにフラッシュバックする問題が発生します.なぜなら、8.0は未知のソースアプリケーションに対して、アプリケーション権限設定の「特殊アクセス権限」に「他のアプリケーションのインストール」の設定が加わったためです.2、AndroidManifest.xmlにprovider宣言を追加するには、次の手順に従います.
    
            
        
    
    

    3、resディレクトリの下にxmlというディレクトリを新規作成し、xmlディレクトリの下にfile_というディレクトリを新規作成するpaths.xmlのファイル;4、file_paths.xmlのファイルには、次のコードが追加されます.
    
    
        
        
        
    
    

    5、Android Nポップアップインストールインターフェースのコードに合う:
    private void isAPK(String filePath) {
        File file = new File(filePath);
        if (file.getName().endsWith(".apk")) {
            try {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                Uri uri;
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //   Android 7    
                    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //                 Uri      
                    uri = FileProvider.getUriForFile(XRetrofitApp.getApplication(), XRetrofitApp.getApplication().getPackageName() + ".fileprovider", file);//  FileProvider    content   Uri
                } else {
                    uri = Uri.fromFile(file);
                }
                intent.setDataAndType(uri, "application/vnd.android.package-archive"); //   apk  
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                XRetrofitApp.getApplication().startActivity(intent);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    PS:ファイルをダウンロードした後、スキャン放送を送ることによって、システムにデータベースをスキャンして直ちにドキュメントの中のファイルを更新することを教えることができて、このようにダウンロードしてインストールの間違いがあっても、ドキュメントに入ってインストールのアプリケーションパッケージを見ることができて、コードは以下の通りです:
    Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    //       IMG_PATH  
    Uri uri = Uri.fromFile(new File(downLoadPath + java.io.File.separator));
    intent.setData(uri);
    context.sendBroadcast(intent);