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ファイル作成 呼び出し方式(ここではインストール更新を例に)
savaPathはapkに格納されたパスであり、ここにはアプリケーションの下のfilesフォルダ、すなわち
savaPath = getContext().getFilesDir().getAbsolutePath() +"/update.apk"
に注意 android:authoritiesの構成は必ずFileProvider.getUriForFile()メソッドの2番目のパラメータは一致しています BuildConfig.APPLICATION_IDが間違っていないように、現在のアプリケーションの次のBuildConfig を使用します.
私たちのアプリケーションが更新をインストールしたり、カメラで写真を撮ったりして画像処理をしたり、ファイルを他のアプリケーションに共有したりするように、これらの知識点が使われるかもしれません.
このように
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”.
使い方はこうです
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"
に注意