【问题标题】:How to distinguish between camera and movie mode in Android?如何区分Android中的相机模式和电影模式?
【发布时间】:2017-01-18 12:45:12
【问题描述】:

我使用的是 Android 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。我想区分相机和电影意图。我怎么能通过编程知道它,因为它们都叫相机。这是我获取当前进程名称的代码

    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;

【问题讨论】:

    标签: android android-intent android-camera android-camera-intent


    【解决方案1】:

    您可以通过ACTION_IMAGE_CAPTURE请求相机拍照,也可以通过via ACTION_VIDEO_CAPTURE请求相机录制视频。

    如果您正在测试的相机应用程序允许用户在从这些Intent 操作启动时在这些模式之间切换,恕我直言,这是相机应用程序中的一个错误。

    【讨论】:

    • 谢谢。我更新我的问题更清楚。实际上,我可以通过按下录制按钮来切换两种模式:root 手机中的相机和电影。使用上面的函数,我可以得到当前的应用程序名称,它们在两种模式下显示的结果与相机相同
    • @user8264:欢迎用户为Intent选择相同的应用程序,您无法在其设置屏幕上区分该应用程序是否正在拍照、录制视频,或做任何其他事情。如果您需要这种程度的控制,请不要使用这些Intent 操作并直接在您的应用程序中实现相机功能。此外,UsageStatsManager 不是实时的(“注意:事件日志的最后几分钟将被截断以防止应用程序滥用”),因此您现有的代码将无法可靠地运行。
    • 所以,我们没有办法区分这些模式。我的目标是检测当前进程名称,例如摄像头捕获和摄像头记录。有可能吗?
    • @user8264:不,因为通常在任何一种情况下它都是相同的进程名称,并且出于隐私和安全原因,您无法从 UsageStatsManager 获取当前进程名称。此外,如果你是发起这些Intents 的人,你就知道你要的是什么。
    • 没有安全问题,我怎么知道?因为我在root手机中工作
    【解决方案2】:

    处理MediaStore.ACTION_IMAGE_CAPTURE 的应用程序不应允许您切换到视频模式,因为您明确调用它是为了捕捉图像(ACTION_VIDEO_CAPTURE 操作也是如此,它应该只坚持视频模式)。我会将此问题报告给应用程序供应商,而不是浪费时间尝试解决其他人的错误。

    【讨论】:

    • 我可以通过按默认相机应用程序中的录制按钮进行切换。它将去记录相机应用程序。
    猜你喜欢
    • 2017-04-11
    • 2014-07-23
    • 2021-01-22
    • 2023-04-10
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    相关资源
    最近更新 更多