【#android】File.delete()でSDカードの画像を消しても,0バイトのファイルが残る
関連記事
- GoogleがAndroidの更新方針を変更 年1回から小刻みに 【2025年12月08日(月)】
- トランプ大統領スマホも別関税課す方針“除外発表していない” 【2025年04月14日(月)】
- ぎんゆぅ~さんの更新頻度が落ちているときは仕事炎上中(爆 【2025年01月09日(木)】
- 仕事が納まった,のか?一応,拘束解除命令が出たモルモルモル 【2024年12月27日(金)】
- さすがに激務すぎ,ワロタ! 【2024年12月25日(水)】
Intent呼び出して,カメラ起動して返ってきてから,画像を加工して,さっさと元画像を消そうかと?
まず,フルパスファイル名を取るまで一苦労
Intentの戻りの中にフルパス名が入ってくることが分かって
ファイル名の取得方法@googleグループ内の記事
んじゃあとは,File.delete()でドカンと消せばええやん!じゃったんじゃが,これが消えない!
0バイトに詰められた画像ファイルが残って,スマフォのギャラリーアプリとか見たら,虫食い状態.非常にみっともない(汗
原因を追跡して行ったら,なんとなくサムネイルキャッシュが残っているような気がしてきた
ってことで調べたら,こちらにそのもの記事が...>SDカード内画像の削除@SugiBlog
ただ,こちらのコードは古いAndroid向けっぽい.Android Ver4以降に対応するためにちょいと弄った
ってことで,清書した結果がこれ
あとに来られる人のために残しておきまする
各記事を掲載された皆様,ありがとさんでございまする
んにしても,画像ファイル一個消すために半日潰れた(ブツブツ爆
【追記】
引数intentがNULLで返ってくる機体があるっ!
お借りしている,京セラTORQUEとか京セラTORQUEとか京セラTORQUEとか
(んたく,京セラは...ブツブツ)
>>String jpegFullPath = intent.getDataString();
なんて書いてたもんだから,いきなり,ぬるぽで落ちた(GRB爆
ってことで,intentがNULLの場合は,控えておいたURIオブジェクトから実パスを引っ張り出せる模様
コードを書きなおしておきますです
んで,URIから実パスを引っ張りだすカラクリは,こちらのサイトのコードを利用しました
AndroidでUriからファイルパスを取得する方法@9ensanのLifeHack
//------------------------------------------------------------------
//カメラからのActivty
//
//------------------------------------------------------------------
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent)
{
//SDカード内のファイルパスを得る
String jpegFullPath = "";
if (intent != null) //SHな機体は if文の中身だけでOKだったんだが(ブツブツ
{
String jpegFullPath = intent.getDataString();
if (jpegFullPath.indexOf("content:") == 0)
{
Uri uri = Uri.parse(jpegFullPath);
Cursor cur = getContentResolver().query(uri, null, null, null, null);
cur.moveToPosition(0);
jpegFullPath = cur.getString(1);
cur.close();
}
}
//京セラTORQUEでは落ちやがった!ので,対応コード(ブツブツ
else if (m_ImageUri != null) //m_ImageUriは カメラをIntent呼び出しする直前に,生成して保存かけておくURIオブジェクト
{
jpegFullPath = getPath(this, m_ImageUri); //URIの中から,ファイルへの実パスを得るスタティック関数
}
//これでパスが取れなかったら,諦めましょう(爆
//
//得た生画像を引き込んでこの辺りでゴニョゴニョする
//
//その生画像をとっとと消す
if (jpegFullPath.equals("") == false)
{
File file = new File(jpegFullPath);
if(file.exists()) {
String[] proj = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
proj,
MediaStore.Images.Media.DATA + " = ?",
new String[] { jpegFullPath },
null);
if(cursor.getCount() != 0) {
cursor.moveToFirst();
Uri deleteUri = ContentUris.appendId(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon(),
cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID))).build();
getContentResolver().delete(deleteUri, null, null);
}
file.delete();
cursor.close();
}
}
}
//URIの中から,カメラの実パスを得るスタティック関数
public static String getPath(Context context, Uri uri) {
ContentResolver contentResolver = context.getContentResolver();
String[] columns = { MediaStore.Images.Media.DATA };
Cursor cursor = contentResolver.query(uri, columns, null, null, null);
cursor.moveToFirst();
String path = cursor.getString(0);
cursor.close();
return path;
}

コメント
広島カープの羽月隆太郎容疑者、「ゾンビたばこ」使用の疑いで逮捕
【#総選挙】衆議院選挙 きょう公示 12日間の選挙戦へ
青森 スノーモービル乗るため入山の約10人と連絡取れず 遭難か
【#不発弾】宮崎市中心部の不発弾 17日に処理 避難指示や交通規制予定(26/1/17)
【総選挙】立民 公明 衆院選に向け新党結成で合意(26/1/15)
【大雪】大雪と雷及び突風に関する全般気象情報 第3号(26/1/1)
ブルーレイはオワコン? ソニー生産終了が意味する「次世代メディア」の失敗
ビジネスホテルで火事 1人遺体で見つかる 宿泊客4人けが 水戸
【#ドラセナ】御神木たる幸福の木(ドラセナ):花芽がほころびだした!すごい香りで部屋が満たされてる!