如何在Cordova / Phonegap中截取用户主屏幕的屏幕截图?

时间:2014-12-17 01:53:20

标签: javascript android jquery cordova

我尝试从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();




上面的代码会编译但仍会捕获应用程序屏幕,即使它在后台运行而不是用户主屏幕。

任何帮助,以弄清楚如何获得"视图"当应用程序处于后台模式时,用户主屏幕而不是应用程序屏幕?

问候。

0 个答案:

没有答案