web-dev-qa-db-ja.com

Images.Media.insertImageがnullを返す理由

メソッドMediaStore.Images.Media.insertImage(ファイル名ではなくソースから挿入)を実行するコードがいくつかあります。このコードは画像をMediaStoreに保存し、画像のuriを返します。何らかの理由で失敗すると、URIではなくnullが返されることを私は知っています。この画像は多くの人によって何度もダウンロードされており、たまにこのメソッドからnullが返されます。私はこれが私に起こったことがないので、何が起こっているのか分かりません。これが発生する理由は何ですか?同じ問題の別の post がありますが、答えはMediaStoreのソースコードへのリンクですが、そのリンクはリンクが利用できないことを示すページに移動します。どんな助けでもいただければ幸いです。ありがとう。

SDカードを取り外した後、このエラーが発生したので、それが原因である可能性があることはわかっていますが、よくわかりませんが、カードがいっぱいになった場合にも発生すると思います。それでも、別の理由があるのではないかと思っています。

19
dj.lnxss

一部のバージョンのAndroidで/ sdcard/DCIM/Cameraディレクトリがない場合に発生するようです。このディレクトリを作成する(そして権限を持つ)ことで問題は解決しました。

16
thomasd

MediaStore.Images.Media.insertImageは、実際には画像を保存するために外部ストレージにアクセスしています。

アプリの失敗の原因となる可能性のあるいくつかの重要なリマインダー:

  1. 大容量記憶装置モードの場合、USB接続はSDカードの使用をブロックします。

  2. SDカードにアクセスできなくなる可能性のある他の要因がある可能性があるため、最初にファイルブラウザを使用してSDカードにアクセスできることを確認してください。

  3. 権限がAndroid.permission.WRITE_EXTERNAL_STORAGEで正しく構成されていることを確認してください

InsertImageからnullを取得していたため、完全を期すためにこれをここに投稿しました。原因は1。でした。

8
00500005

新しいSDカードイメージを使用してエミュレーターでテストを実行しているときに、この問題が発生しました。 _/sdcard/Pictures_を作成して問題を解決することができました

new File("/sdcard/Pictures").mkdirs();

5
tahnok

このような問題が発生したときは、権限を追加して修正しました。

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
2
lxknvlk

WRITE_EXTERNAL_STORAGEおよびREAD_EXTERNAL_STORAGEへのユーザー権限を取得する前にMediaStore.Images.Media.insertImageを実行していたため、nullパスが発生していました

したがって、ユーザーが許可を与えていることを確認してから、画像を保存してください

1

マニフェストファイルに権限を追加したことを確認してください。

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.read_external_storage" />

次に、呼び出す前にこのコードを追加します

MediaStore.Images.Media.insertImage

File sdcard = Environment.getExternalStorageDirectory();
    if (sdcard != null) {
        File mediaDir = new File(sdcard, "DCIM/Camera");
        if (!mediaDir.exists()) {
            mediaDir.mkdirs();
        }
    }
1
Muhammad Asim