2

ルート化されたデバイスがあり、次のコードを使用して現在の画面のスクリーンショットを正常にキャプチャします。

Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("/system/bin/screencap -p " + path + "; \n");

しかし、コマンドでファイルを保存するパスを指定すると、システムがファイルにイメージを書き込むのに時間がかかります。プロセスから画像データをバイト形式で直接取得できますか? 現在の画像をすぐにサーバーに送信したい。

4

2 に答える 2

0

mahさんも指摘されているように無理だと思います。

以下のコードは、画像をメモリに書き込んでいる間、アプリの応答性を維持するのに役立ちます。

これは、UI/main threadがキャプチャしたスクリーンショットをメモリに書き込むのに忙しいためです。したがって、この問題を解決する最も簡単な方法はAsyncTask.

public CaptureScreenShot extends Activity
{
  ArrayList<bitmap> arrayListImage;
  int i=0;

  public void captureScreenshot()
  {
     i++;

     // store the image in arrayList "image"

     new BackgroudClass.execute();
  }

 private class BackgroudClass extends AsyncTask<Void, Void, Void> 
 {
     @Override
     protected Void doInBackgroud(Void.. params)
     {
        // write the image from arrayList at imageArrayList.get(i);
     }
 }


@Override 
public onStop()
{
    arrayListImage = null; // making it eligible for GC
}

お役に立てれば。

于 2013-09-14T13:53:53.750 に答える