Android FileProviderアプリケーション間でデータを共有

3150 ワード

Androidバージョンがますます高くなるにつれて、Android公式はユーザーのデータ保護に力を入れています.AndroidはFileProviderクラスを提供し、間の共有データを供給します.
私たちのアプリケーションが更新をインストールしたり、カメラで写真を撮ったりして画像処理をしたり、ファイルを他のアプリケーションに共有したりするように、これらの知識点が使われるかもしれません.
このように


    
    
    


FileProviderがサポートするいくつかのpathタイプ
Androidの公式ドキュメントから、FileProviderは以下のpathタイプを提供しています.
この方法は、アプリケーションの内部ストレージ領域のファイル/サブディレクトリのファイルを提供する.Contextに対応する.getFilesDirが返すパス:eg:)/data/data/com.richard.simple/files”.
この方法は、アプリケーションの内部ストレージ領域のキャッシュサブディレクトリのファイルを提供する.getCacheDirが返すパス:eg:「/data/data/com.richard.simple/cache」;
この方法では、外部ストレージ領域のルートディレクトリの下にあるファイルを提供します.それはEnvironmentに対応しています.getExternalStorageDirectoryが返すパス:eg:"/storage/emulated/0";
この方法は、アプリケーションの外部ストレージルートディレクトリの下にあるファイルを提供する.Contextに対応する.getExternalFilesDir(String)が返すパス.eg:”/storage/emulated/0/Android/data/com.jph.simple/files”.
この方法では、アプリケーションの外部キャッシュ領域のルートディレクトリのファイルを提供します.Contextに対応する.getExternalCacheDir()が返すパス.eg:”/storage/emulated/0/Android/data/com.richard.simple/cache”.
使い方はこうです
  • AndroidManifestのアプリケーションの下に
  • を登録する
      
                
      
    
  • pathファイル作成
  • 
    
        
        
        
    
    
  • 呼び出し方式(ここではインストール更新を例に)
  • private void installApk() {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                Uri contentUri = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID + ".provider", new File(savePath));
                intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
                PalmApp.getContext().startActivity(intent);
            }else {
                intent.setDataAndType(Uri.fromFile(new File(savePath)), "application/vnd.android.package-archive");
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            }
        }
    

    savaPathはapkに格納されたパスであり、ここにはアプリケーションの下のfilesフォルダ、すなわち
    savaPath = getContext().getFilesDir().getAbsolutePath() +"/update.apk"
    に注意
  • android:authoritiesの構成は必ずFileProvider.getUriForFile()メソッドの2番目のパラメータは一致しています
  • BuildConfig.APPLICATION_IDが間違っていないように、現在のアプリケーションの次のBuildConfig
  • を使用します.