FileUriExposedException: file:///XX/XXXXXX g が ClipData.Item.getUri() によってアプリの外部に公開される問題は解決された。
2022-03-16 11:04:05
FileUriExposedException: file:XXXXXXXXX が ClipData.Item.getUri() によってアプリを超えて公開される問題は解決された。
少し前に、写真を撮ることに関するAppのコードを書いてAndroid 7.0に対応させたので、うちのボスのHuaweiのスマホが遊びに来て、こっそりAndroid 7.0にバージョンアップしてテストしていたら、問題が発生、やっかいなことになったのです。
FileUriExposedException: file:XXXXXXXXX g が ClipData.Item.getUri() によりアプリを超えて公開されました。
このエラー、特に次のClipData.Item.getUri()を通してアプリを超えて公開されているのは何なのか、それすら理解できなかったので、解決策としてネットで調べてみると、こんなことが書かれていました。
case ChatBottomView.FROM_CAMERA:// camera
if (!CAN_WRITE_EXTERNAL_STORAGE) {
Toast.makeText(ServiceChatActivity.this, "Permissions not opened \nPlease go to Settings to open album permissions", Toast.LENGTH_SHORT).show();
} else {
Intent openCameraIntent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
camPicPath = PathUtils.getSavePicPath(ServiceChatActivity.this);
if (Build.VERSION.SDK_INT < 24){
Uri uri = Uri.fromFile(new File(camPicPath));
openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(openCameraIntent,
ChatBottomView.FROM_CAMERA);
}else {
//adapt to Android 7.0
ContentValues contentValues = new ContentValues( 1 );
contentValues.put( MediaStore.Images.Media.DATA,
camPicPath);
Uri uri = getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues );
grantUriPermission( "com.example.lab.android.nuc.chat",uri,Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
openCameraIntent.addFlags( Intent.FLAG_GRANT_READ_URI_PERMISSION );
openCameraIntent.addFlags( Intent.FLAG_GRANT_WRITE_URI_PERMISSION ); openCameraIntent.addFlags( Intent.FLAG_GRANT_WRITE_URI_PERMISSION );
openCameraIntent.putExtra( MediaStore.EXTRA_OUTPUT,uri);
startActivityForResult( openCameraIntent,ChatBottomView.FROM_CAMERA );
}
}
break;
今度こそうまくいくはずだ、そう、本当にうまくいくのだ、私はFileProviderパターンを書き始め、次にIntentを使ってURIを渡そうとしたが、エラーを報告し続け、どうしたらいいのかわからない。それは次のようになります。
File cameraPhoto = new File(cameraPhotoPath);
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri photoUri = FileProvider.getUriForFile(
this,
getPackageName() + ".provider",
cameraPhoto);
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(takePhotoIntent, REQUEST_TAKE_PHOTO);
エラーばかりで、何がなんだかわからない、恋ができない!!!!
さて、ここでマーク、誰が行に直接コードをコピーする必要があり、ストレージのアクセス許可を要求し、カメラを起動する前に、カメラのアクセス許可を呼び出すことを忘れないでください
(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例