まず、この質問に一致する他の多くの投稿を読みましたが、どれもうまくいきませんでした。
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 の問題であると思われます。
何が起こっているのか分かりますか?