我写了一个后台服务,它注册了一个“关闭屏幕”的广播接收器。我希望我的服务能够识别上一个活动的应用程序(我指的是其他应用程序)是否是使用摄像头的应用程序(如默认相机、照片查询、谷歌相机、直线相机等)?然后我可以控制我的服务到它应该做的事情。
@FlyingPumba代码的调试结果
02-20 11:21: 10627- 10627 / I/CameraApp:活动应用名称:我的Camera应用02-20 11:21: 10627-10627/ I/CameraApp: Camera App : com.sec.android.app.camera 02-20 11:21: 10627-10627/ I/CameraApp: Camera App : com.google.android.GoogleCamera 02-20 11:21: 10627-10627/ I/CameraApp: Camera app : com.fotoable.fotobeauty 02-20 11:21:53.556 53.566-53.566-10627/ I/CameraApp: Camera app : com.commsource.beautyplus 02-20 11:21: 10627-10627/ I/CameraApp: Camera app : com.venticake.retrica 02-20 11:21: 10627-10627/ I/CameraApp: Camera app : com.joeware.android.gpulumera 02-20 11:21: 10627-10627/ I/CameraApp: Camera app : com.ywqc.picbeauty 02-20 11:21: 10627-10627/ I/CameraApp: Camera app : vStudio.Android。Camera360 02-20 11:21:53.566 10627-10627/ I/CameraApp:摄像头app : com.almalence.night
发布于 2016-02-20 11:14:08
您可以尝试:
ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
PackageManager pm = this.getPackageManager();
// get the info from the currently running task
List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1);
Log.d("CameraApp", "Foreground Activity Name ::" + taskInfo.get(0).topActivity.getClassName());
ComponentName componentInfo = taskInfo.get(0).topActivity;
if (isCameraApp(componentInfo.getPackageName())) {
// do your stuff
}
private boolean isCameraApp(CharSequence packageName) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// get activities that can resolve the image capture intent
List<ResolveInfo> imageCaptureActivites = context.getPackageManager().queryIntentActivities(intent, 0);
Log.i("CameraApp","Camera app :" + name.toString());
for(ResolveInfo info : imageCaptureActivites) {
if (info.activityInfo.packageName.contains(packageName.toString()) {
return true;
}
}
return false;
}
您将在Manifed中需要此权限:
<uses-permission android:name="android.permission.GET_TASKS"/>
https://stackoverflow.com/questions/35518418
复制相似问题