スクリーンショットを撮りActivity
(タイトルバーなしで、スクリーンショットが実際に撮られたことをユーザーには見せないようにします)、アクション メニュー ボタンの「共有」で共有する必要があります。すでにいくつかの解決策を試しましたが、うまくいきませんでした。何かアイデアはありますか?
ベストアンサー1
このように画面をキャプチャして共有しました。
初め現在のアクティビティからルートビューを取得します。
View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
2番ルートビューをキャプチャします。
public static Bitmap getScreenShot(View view) {
View screenView = view.getRootView();
screenView.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(screenView.getDrawingCache());
screenView.setDrawingCacheEnabled(false);
return bitmap;
}
三番目をBitmap
SDカードに保存します。
public static void store(Bitmap bm, String fileName){
final static String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Screenshots";
File dir = new File(dirPath);
if(!dir.exists())
dir.mkdirs();
File file = new File(dirPath, fileName);
try {
FileOutputStream fOut = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.PNG, 85, fOut);
fOut.flush();
fOut.close();
} catch (Exception e) {
e.printStackTrace();
}
}
やっと、現在のスクリーンショットを共有しますActivity
:
private void shareImage(File file){
Uri uri = Uri.fromFile(file);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "");
intent.putExtra(android.content.Intent.EXTRA_TEXT, "");
intent.putExtra(Intent.EXTRA_STREAM, uri);
try {
startActivity(Intent.createChooser(intent, "Share Screenshot"));
} catch (ActivityNotFoundException e) {
Toast.makeText(context, "No App Available", Toast.LENGTH_SHORT).show();
}
}
私のコードからインスピレーションを得ていただければ幸いです。
アップデート:
以下の権限を に追加しますAndroidManifest.xml
:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
外部ストレージにファイルを作成してアクセスするためです。
アップデート:
Android 7.0 Nougat 以降では、ファイル リンクの共有は禁止されています。これに対処するには、FileProvider を実装し、「file://」URI ではなく「content://」URI を共有する必要があります。
ここやり方については良い説明です。