如您所知,如果设备已植根,您可以使用代码
进行截屏Process sh = Runtime.getRuntime().exec("su", null,null);
OutputStream os = sh.getOutputStream();
os.write(("/system/bin/screencap -p " + "/sdcard/img.png").getBytes("ASCII"));
os.flush();
os.close();
sh.waitFor();
但是使用SDK> 21(5.0或更高版本)它不支持此功能。 所以,我想知道如何使用Android 5.0或更高版本进行屏幕截图 来自服务(另一个应用程序)。
我看过MediaProjectionManager,但它需要运行onActivityResult来获取结果,但是在服务中,它不能激活。
答案 0 :(得分:0)
这个适合你: 在您的类文件中全局声明 -
private File imageFile; private void takeScreenshot(){
try {
String mPath = Environment.getExternalStorageDirectory().toString() +"\\/pic"; View v1 = FirstScreenActivity.mActivity.getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
imageFile = new File(mPath);
FileOutputStream outputStream = new FileOutputStream(imageFile);
int quality = 100;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
outputStream.flush();
outputStream.close();
} catch (Throwable e) {
e.printStackTrace();
}
答案 1 :(得分:0)
首先在Activity类中添加一个活动对象,如下所示 -
public class FirstScreenActivity extends AppCompatActivity {
public static Activity mActivity;
private File imageFile;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity=this;
}
@Override
protected void onResume() {
super.onResume();}
然后在非活动类文件中使用静态mActivity,使用上面代码中的代码:
View v1 = FirstScreenActivity.mActivity.getWindow().getDecorView().getRootView();
答案 2 :(得分:0)
这是在清单文件中指定的接收器 -
(fn? x)
(ifn? x)
就像这些动作一样,您也可以选择其他动作。 注意:请勿忘记为您在接收器中使用的操作添加权限。 这是接收器类,您将编写代码(在本例中为截屏) -
<receiver android:name=".reciever.EventReceiver">
<intent-filter >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.intent.action.USER_PRESENT"/>
</intent-filter>
</receiver>
}
使用此选项,接收器类的onReceive()将在您在清单中指定的特定事件操作上执行。