現在のアクティビティのスクリーンショットを撮って共有するにはどうすればいいですか? 質問する

現在のアクティビティのスクリーンショットを撮って共有するにはどうすればいいですか? 質問する

スクリーンショットを撮り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;
 }

三番目BitmapSDカードに保存します。

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 を共有する必要があります。

ここやり方については良い説明です。

おすすめ記事