在Android中如何区分摄像头和电影模式?

在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

我使用的是安卓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 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
获取当前进程名。此外,如果是您启动了这些
意图
,那么您知道自己的要求。没有安全问题,我怎么知道?因为我在电话公司工作