2016-02-20 143 views
0

我写了一个后台服务,注册一个“屏幕关闭”广播接收器。我希望我的服务能够识别上一个活动应用程序(我的意思是其他应用程序)是否是使用相机的应用程序(例如默认相机,照片奇迹,谷歌相机,线阵相机等?然后,我可以控制我的服务,它应该做的事,从@FlyingPumba代码如何检查相机应用程序是否是服务的活动活动?

调试结果

11月2日至20日:21:53.546 10627-10627/I/CameraApp:活跃APP名称:我的相机应用 02-20 11:21:53.556 10627-10627/I/CameraApp:相机应用:com.sec.android.app.camera 02-20 11:21:53.556 10627-10627/I/CameraApp:相机应用:com。 google.android.GoogleCamera 02-20 11:21:53.566 10627-10627/I/CameraApp:相机应用:com.fotoable.fotobeauty 02-20 11:21:53.566 10627-10627/I/CameraApp:相机应用:com.msource.beautyplus 02-20 11:21:53.566 10627-10627/I/CameraApp:相机应用:com.venticake.retrica 02-20 11:21:53.566 10627-10627/I/CameraApp:相机应用:com.joeware.android.gpulumera 02-20 11:21:53.566 10627-10627/I/CameraApp:相机应用:com.ywqc .picbeauty 02-20 11:21:53.566 10627-10627/I/CameraApp:相机应用:vStudio.Android.Camera360 02-20 11:21:53.566 10627-10627/I/CameraApp:相机应用:com.al malence 。晚上

回答

0

你可以尝试:

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"/> 
+0

谢谢@FlyingPumba isCameraApp()函数正常。但活动应用程序名称并不如预期。它总是我的应用程序。让我看看我的调试结果。 –

相关问题