检测屏幕截图 Android
Detect a screenshot Android
我最近几年编程 Android 我想知道一件事:如何检测用户何时截取屏幕截图?我希望当用户截屏时,我们移动到下一个 activity 。
我尝试了拦截事件的方法,但是有一个问题:当设备进入休眠状态时,例如,拦截了一个事件。有没有只拦截截屏事件或者忽略其他事件的解决方案?
感谢您的帮助!
没有直接的 Broadcast Intent 告诉你已经截图了。
有些人 here 讨论了这样做的可能选项(就像在 Snapchat 上所做的那样)。
一种可能的选择是使用 FileObserver
.
这是我的技巧,可以在截图时收到通知。
public void detectScreenShotService(final Activity activity){
final Handler h = new Handler();
final int delay = 3000; //milliseconds
final ActivityManager am=(ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE);
h.postDelayed(new Runnable(){
public void run(){
List<ActivityManager.RunningServiceInfo> rs=am.getRunningServices(200);
for(ActivityManager.RunningServiceInfo ar:rs){
if(ar.process.equals("com.android.systemui:screenshot")){
Toast.makeText(activity,"Screenshot captured!!",Toast.LENGTH_LONG).show();
}
}
h.postDelayed(this, delay);
}
}, delay);
}
在 Oneplus 2 和 Moto E 上测试。
更新:
这最终对我不起作用,我最终在屏幕截图类型的条目上使用了 ContentObserver。
我最近几年编程 Android 我想知道一件事:如何检测用户何时截取屏幕截图?我希望当用户截屏时,我们移动到下一个 activity 。 我尝试了拦截事件的方法,但是有一个问题:当设备进入休眠状态时,例如,拦截了一个事件。有没有只拦截截屏事件或者忽略其他事件的解决方案?
感谢您的帮助!
没有直接的 Broadcast Intent 告诉你已经截图了。
有些人 here 讨论了这样做的可能选项(就像在 Snapchat 上所做的那样)。
一种可能的选择是使用 FileObserver
.
这是我的技巧,可以在截图时收到通知。
public void detectScreenShotService(final Activity activity){
final Handler h = new Handler();
final int delay = 3000; //milliseconds
final ActivityManager am=(ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE);
h.postDelayed(new Runnable(){
public void run(){
List<ActivityManager.RunningServiceInfo> rs=am.getRunningServices(200);
for(ActivityManager.RunningServiceInfo ar:rs){
if(ar.process.equals("com.android.systemui:screenshot")){
Toast.makeText(activity,"Screenshot captured!!",Toast.LENGTH_LONG).show();
}
}
h.postDelayed(this, delay);
}
}, delay);
}
在 Oneplus 2 和 Moto E 上测试。
更新:
这最终对我不起作用,我最终在屏幕截图类型的条目上使用了 ContentObserver。