在Android中如何区分摄像头和电影模式?
我使用的是安卓6.0,打开相机的意图在Android中如何区分摄像头和电影模式?,android,android-intent,android-camera,android-camera-intent,Android,Android Intent,Android Camera,Android Camera Intent,我使用的是安卓6.0,打开相机的意图 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); try { getApplication().startActivity(intent); } catch (final ActivityNotFoundExcepti
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
getApplication().startActivity(intent);
} catch (final ActivityNotFoundException e) {
e.printStackTrace();
}
它会打开我的相机。如果我按下“电影”按钮,将显示电影GUI。我想区分相机和电影的意图。我怎么能通过编程知道呢,因为他们两个的名字都是camera。这是我获取当前进程名称的代码
String foregroundProcess = null;
UsageStatsManager mUsageStatsManager = (UsageStatsManager) getApplicationContext().getSystemService(Service.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
UsageEvents usageEvents = mUsageStatsManager.queryEvents(time - 1000 * 3600, time);
UsageEvents.Event event = new UsageEvents.Event();
while (usageEvents.hasNextEvent()) {
usageEvents.getNextEvent(event);
if(event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
foregroundProcess = event.getPackageName();
}
}
//Convert package name to application name
final PackageManager pm = getApplicationContext().getPackageManager();
ApplicationInfo ai;
try {
ai = pm.getApplicationInfo(foregroundProcess, 0);
} catch (final PackageManager.NameNotFoundException e) {
ai = null;
}
String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");
return applicationName;
您可以通过
ACTION\u IMAGE\u CAPTURE
请求相机拍照,也可以请求相机录制视频
如果您正在测试的摄像头应用程序允许用户在这些模式之间切换,则当从这些
Intent
操作启动时,我想这是摄像头应用程序中的一个错误。处理MediaStore.ACTION\u IMAGE\u CAPTURE的应用程序不应允许您切换到视频模式,因为您显然是为了捕获图像而调用它的(对于ACTION\u video\u CAPTURE
ACTION,它应该只保持视频模式)。我会将此问题报告给应用程序供应商,而不是浪费时间试图解决其他人的错误。我可以通过按默认摄像头应用程序中的录制按钮进行切换。它将转到录制相机应用程序。谢谢。我更新了我的问题以便更清楚。实际上,我可以通过按录制按钮在手机中切换两种模式:照相和电影。使用上面的函数,我可以得到当前的应用程序名,它们显示的结果和相机在这两个方面是一样的modes@user8264:欢迎用户为意图
选择相同的应用程序,您无法在其设置屏幕上区分该应用程序是否正在拍照、录制视频,或者做其他事情。如果您需要这种程度的控制,请不要使用这些Intent
操作,而是直接在应用程序中实现摄像头功能。此外,usagestastsmanager
不是实时的(“注意:事件日志的最后几分钟将被截断以防止应用程序滥用”),因此您现有的代码无法可靠工作。因此,我们无法区分这些模式。我的目标是检测当前进程名称,如camera capture和camera record。有可能吗?@user8264:没有,因为通常这两种情况下都是相同的进程名,并且出于隐私和安全原因,您无法从usagestastsmanager
获取当前进程名。此外,如果是您启动了这些意图
,那么您知道自己的要求。没有安全问题,我怎么知道?因为我在电话公司工作