Android端末の写真をコードから削除する
移転しました →
Android触り始めました。さすがに初めてすぎて全然わかんない。
iOSと違ってAndroidでは公式ではないアプリが写真を削除することができるらしいということでサンプルを書いてためしてみました。
下のコードでは
- ギャラリーを開いて
- 写真を選択して
ContentResolver::delete
にURI渡しで削除
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ボタンクリックで写真選択へ Button b = (Button)findViewById(R.id.button_open); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_PICK); startActivityForResult(intent, 0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 0 && resultCode == RESULT_OK) { try { getContentResolver().delete(data.getData(), null, null); } catch (Exception e){ Log.d("MainActivity", e.getMessage()); } } } }
でもこれだけでは削除は完了しません。
例外キャッチ時のメッセージを適当な"Fail"
みたいなメッセージにしていたせいで全然気が付かなかったんですが、ちゃんと例外メッセージを出したらこんなん↓が出てました。
writing com.android.providers.media.MediaProvider uri content://media/external/images/media/1368 from pid=27267, uid=10071 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
パーミッションが足りないらしい。
ということでAndroidManifest.xml
にパーミッションに関して追記することで削除ができるようになりました。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com....." > <application> ... </application> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> </manifest>