5

まず、この質問に一致する他の多くの投稿を読みましたが、どれもうまくいきませんでした。

Android L を実行している Nexus 5 のデバイスでアプリをテストしています。ルート化されていません。この同じコードは、API 19 を実行している古い Android でも機能します。

次のコードを使用して、スクリーンショットを撮って共有しようとしています。

    View screen = getWindow().getDecorView().getRootView();
    screen.setDrawingCacheEnabled(true);
    Bitmap bitmap = screen.getDrawingCache();
    String filename = getScreenshotName();
    String filePath = Environment.getExternalStorageDirectory().getPath()
            + File.separator + filename;

    File imageFile = new File(filePath);
    try {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);
        byte[] bitmapData = bos.toByteArray();

        FileOutputStream fos = new FileOutputStream(imageFile);
        fos.write(bitmapData);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }

    // share
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("image/png");
    share.putExtra(Intent.EXTRA_STREAM, Uri.parse(filePath));
    startActivity(Intent.createChooser(share, "Share Image"));

私は以下の権限を持っていますAndroidManifest.xml:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

そして、私はこのエラーを受け取ります:

java.io.FileNotFoundException: /storage/emulated/0/2014-09-14.png: open failed: EACCES (Permission denied)

この行で:

FileOutputStream fos = new FileOutputStream(imageFile);

filePath を取得する他の 10 の方法も試しましたが、これはデバイス/Android L の問題であると思われます。

何が起こっているのか分かりますか?

4

0 に答える 0