MediaProjectionを使用してscreenshotを撮影しています。これは私がやっていることです。サービスを使用してオーバーレイアイコンを作成しました。オーバーレイアイコンをクリックするとスクリーンショットが撮られます。アプリケーションが戻るボタンを押すか手動でスワイプすることでアプリケーションが終了するたびに、MediaProjectionオブジェクトが失われます.MediaProjectionを維持し、アプリケーションが強制終了されるたびにMediaProjectionを要求しないようにする方法があります。私はすでにthisを見ましたが、私はまだそれを行うことができません。アプリケーションの終了時にMediaProjectionオブジェクトが失われないようにします。
私MainactivityにOnclickは、次のようにstartActivityForResultし、得られonActivityResultが含まれていて、次のように
@Override
protected void onActivityResult(final int requestCode,final int resultCode,final Intent data)
{
if (requestCode == requestcode)
{
if (resultCode == RESULT_OK)
{
Singelton.setScreenshotPermission((Intent) data.clone());
Singelton.putmanger(mediaProjectionManager);
}else if (resultCode==RESULT_CANCELED) {
Singelton.setScreenshotPermission(null);
}
}
}
Singeltonクラスがある:オーバーレイアイコンの
protected static void setScreenshotPermission(final Intent permissionIntent)
{
screenshotPermission = permissionIntent;
//screenshotPermission becomes null once the application is killed
}
public static MediaProjection getData()
{
return (mediaProjection);
}
public static void getScreenshotPermission()
{
if (screenshotPermission != null)
{
Log.d("screenshotpermisson", "screenshotPermission != null ");
if(mediaProjection!=null)
{
Log.d("mediaprojection", "mediaprojection != null ");
mediaProjection.stop();
mediaProjection = null;
}
mediaProjection = mediaProjectionManager.getMediaProjection(Activity.RESULT_OK, (Intent) screenshotPermission.clone());
}
else
{
//Here I need to request for media projection again without starting activity
}
}
私のサービスクラスは次のようにクリックし処理します。
public void createDisplay()
{
if (mediaProjection == null)
{
Singelton.getScreenshotPermission();
mediaProjection = Singelton.getData();
}
mImageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1);
vd = mediaProjection.createVirtualDisplay("screen-mirror", width, height, mDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mImageReader.getSurface(), null, null);
mImageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener(){..}
}
私はアンドロイドを初めてお使いで、これを理解するのに時間がかかります。
背景に移動するアプリが必ずしも強制終了されるわけではありません。メモリを解放するために殺されるかもしれないし、一時停止されない限り静かに座っているかもしれない。一時停止時にメディアプロジェクションを解放できず、再開時にメディアプロジェクションを再作成できない理由はありますか? – fadden