web-dev-qa-db-ja.com

スクリーンショットを撮る-バックグラウンドサービス

バックグラウンドサービスを使用してスクリーンショットを撮ろうとしています。このサービスはFacebookのチャットヘッドのようなものですが、クリックしたときにスクリーンショットを撮ってほしいです。

プレビュー画像

私はいくつかのコードを開発しましたが、それは機能しません。私が最後に試したのは:

private void takeScreenshot() {
    Date now = new Date();
    Android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);

        // image naming and path  to include sd card  appending name you choose for file
        String mPath = Environment.getExternalStorageDirectory().toString() + "/capture/" + now + ".jpg";

        // create bitmap screen capture
        Bitmap bitmap;
        View v1 = chatHead.getRootView();
        v1.setDrawingCacheEnabled(true);
        bitmap = Bitmap.createBitmap(v1.getDrawingCache());
        v1.setDrawingCacheEnabled(false);

        OutputStream fout = null;
        File imageFile = new File(mPath);

        try {
            fout = new FileOutputStream(imageFile);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fout);
            fout.flush();
            fout.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

しかし、スクリーンショットを画面ではなくボタンに撮っています。

私は問題がここにあることを知っています:

View v1 = chatHead.getRootView();

しかし、私はそれを修正する方法がわかりません。誰か助けてもらえますか?

私は実際にAndroid Studio2.2.2およびAndroid 4.0以降を使用しています。

5
Mister JJ

Lollipop以上の場合、Googleの MediaProjection APIを使用してスクリーンショットを撮ることができますが、ユーザーに許可を求める必要があります。

MediaProjectionを使用してサンプルのスクリーンキャプチャコードを見つけることができます ここ

Lollipop未満のデバイスの場合は、root権限が必要です。

3
Sarthak Doshi

アプリに属していないビューを含むスクリーンショットを取得するには、MediaProjectionManagerを使用する必要があります。

Androidアプリケーション? のステータスバーの内容を含むスクリーンショットを撮る方法

4
gjsalot

使用する MediaProjectionManager#createScreenCaptureIntentAndroidのMediaProjectionAPIで提供されます。現在行っているのは、上部のステータスバーを含むデバイスの全画面に表示される情報ではなく、chatHeadのルートビューの情報を取得することです。

0
ADITYA RANA