我尝试从this插件修改Screenshoot.java文件,以便在应用程序以后台模式运行时,截取用户主屏幕而非appView屏幕的屏幕截图。当应用程序使用this插件进入后台模式时,应用程序会继续拍摄appView的屏幕截图,即使在后台也不是前景屏幕或用户主屏幕。
您可以在下面看到原始Screenshoot.java文件的一部分:
@Override
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
// starting on ICS, some WebView methods
// can only be called on UI threads
if (action.equals("saveScreenshot")) {
final String format = (String) args.get(0);
final Integer quality = (Integer) args.get(1);
final String fileName = (String)args.get(2);
super.cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
View view = webView.getRootView();
try {
if(format.equals("png") || format.equals("jpg")){
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
File folder = new File(Environment.getExternalStorageDirectory(), "Pictures");
if (!folder.exists()) {
folder.mkdirs();
}
File f = new File(folder, fileName + "."+format);
FileOutputStream fos = new FileOutputStream(f);
if(format.equals("png")){
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
}
if(format.equals("jpg")){
bitmap.compress(Bitmap.CompressFormat.JPEG, quality == null?100:quality, fos);
}
JSONObject jsonRes = new JSONObject();
jsonRes.put("filePath",f.getAbsolutePath());
PluginResult result = new PluginResult(PluginResult.Status.OK, jsonRes);
callbackContext.sendPluginResult(result);
}else{
callbackContext.error("format "+format+" not found");
}
} catch (JSONException e) {
callbackContext.error(e.getMessage());
} catch (IOException e) {
callbackContext.error(e.getMessage());
}
}
});
return true;
}
callbackContext.error("action not found");
return false;
};

经过一番研究,我试图改变代码:
View view = webView.getRootView();

代码:
View view = getWindow().getDecorView().getRootView();

但是它给出了一个错误,即即使在我插入后,方法getWindow()也找不到:
import android.view.Window;

然后我将代码更改为:
View view = cordova.getActivity().getWindow().getDecorView().getRootView();

上面的代码会编译但仍会捕获应用程序屏幕,即使它在后台运行而不是用户主屏幕。
任何帮助,以弄清楚如何获得"视图"当应用程序处于后台模式时,用户主屏幕而不是应用程序屏幕?
问候。