4

Android で A PNG を ShareActionProvider と共有しようとしています。Uri に対して PNG を開くと、ファイルが見つからないと表示されます。 open failed: ENOENT (No such file or directory)ファイルシステムにアクセスして自分で見たことがありますが。携帯電話とAVDで保存エラーが発生したことを試しました。私は周りを見回しましたが、答えは見つかりませんでした。どんな助けでも大歓迎です。

ファイルを開こうとする場所は次のとおりです。

 File file = new File(getFilesDir()+"wifiqr/", "QRCode.png");
                file.setReadable(true, false);
                Uri uri = Uri.fromFile(file);
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("image/*");
                intent.putExtra(Intent.EXTRA_STREAM,uri);
                provider.setShareIntent(intent);

ここで役立つ場合は、保存する場所です:

 String fileName = getFilesDir()+"/wifiqr/" + "QRCode.png";
                etSSID.setText(fileName);
                OutputStream stream = null;
                try {
                    stream = new FileOutputStream(fileName);
                    bmp.compress(Bitmap.CompressFormat.PNG, 80, stream);
                    stream.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

最後にエラーログ:

11-15 02:34:43.243      594-892/com.android.mms E/Mms/media: IOException caught while opening or reading stream
        java.io.FileNotFoundException: /data/data/com.frostbytedev.wifiqr/fileswifiqr/QRCode.png: open failed: ENOENT (No such file or directory)
        at libcore.io.IoBridge.open(IoBridge.java:416)
        at java.io.FileInputStream.<init>(FileInputStream.java:78)
        at java.io.FileInputStream.<init>(FileInputStream.java:105)
        at android.content.ContentResolver.openInputStream(ContentResolver.java:447)
        at com.android.mms.model.MediaModel.initMediaSize(MediaModel.java:235)
        at com.android.mms.model.MediaModel.<init>(MediaModel.java:74)
        at com.android.mms.model.RegionMediaModel.<init>(RegionMediaModel.java:36)
        at com.android.mms.model.RegionMediaModel.<init>(RegionMediaModel.java:31)
        at com.android.mms.model.ImageModel.<init>(ImageModel.java:73)
        at com.android.mms.ui.SlideshowEditor.changeImage(SlideshowEditor.java:163)
        at com.android.mms.data.WorkingMessage.internalChangeMedia(WorkingMessage.java:640)
        at com.android.mms.data.WorkingMessage.changeMedia(WorkingMessage.java:588)
        at com.android.mms.data.WorkingMessage.setAttachment(WorkingMessage.java:453)
        at com.android.mms.ui.ComposeMessageActivity.addImage(ComposeMessageActivity.java:3150)
        at com.android.mms.ui.ComposeMessageActivity.addAttachment(ComposeMessageActivity.java:3291)
        at com.android.mms.ui.ComposeMessageActivity.access$5900(ComposeMessageActivity.java:167)
        at com.android.mms.ui.ComposeMessageActivity$35.run(ComposeMessageActivity.java:3236)
        at com.android.mms.ui.AsyncDialog$ModalDialogAsyncTask.doInBackground(AsyncDialog.java:129)
        at com.android.mms.ui.AsyncDialog$ModalDialogAsyncTask.doInBackground(AsyncDialog.java:84)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)
        Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
        at libcore.io.Posix.open(Native Method)
        at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
        at libcore.io.IoBridge.open(IoBridge.java:400)
        ... 24 more
4

2 に答える 2

2

openFileOutputで説明されているように、そのgetFilesDir()特定のアプリに対してプライベートです (つまり、他のアプリはそれを読み取ることができません) (これは、そのドキュメントに従って返される同じディレクトリです)。getFilesDir

アプリケーション間でファイルを共有しようとしている場合は、ファイル共有トレーニング ガイドに従って、他のアプリケーションがファイルにアクセスできるようにします。

于 2013-11-15T04:17:28.123 に答える
1

保存コードには次のものがあります。

String fileName = getFilesDir()+"/wifiqr/" + "QRCode.png";

ロード コードでは、「wifiqr/」の前に先頭のスラッシュがありません。

File file = new File(getFilesDir()+"wifiqr/", "QRCode.png");

ロード コードの「wifiqr/」の前に「/」を入れるつもりだったようです。保存コードgetFilesDir()は、末尾のスラッシュがまだない可能性があることを意味します。

開こうとしているファイルの名前もログに出力されます。

/data/data/com.frostbytedev.wifiqr/fileswifiqr/QRCode.png

「fileswifiqr」という名前のディレクトリがあることを期待していないようです。

トラブルシューティングの試みで欠けていたリンクは次のとおりです。開こうとしているファイルが存在することはわかっていましたが、開こうとしていたファイルをコードが実際に開いていることを確認する必要がありました。

于 2013-11-15T03:04:55.727 に答える