1

我的应用在后台模式下使用麦克风(AudioRecord),如何制作电话事件和语音命令的监听器(如谷歌语音)。我需要释放一个麦克风(AudioRecord)以供使用。

我找到了电话事件的解决方案:http: //www.botskool.com/geeks/how-listen-phone-events-android。使用: TelephonyManager , PhoneStateListener。

但不是语音命令。请帮忙。

4

1 回答 1

1

没有特定的方法可以做到这一点(不幸的是),只有尝试使用麦克风资源的应用程序才会出错。

你可以做的是监控用户在后台做什么并做出相应的反应。以下是检查 Google Now 是否已成为前台应用程序的代码:

public static boolean googleNowForeground(final Context ctx) {

    final ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);

    if (activityManager.getRunningTasks(1).get(0) != null) {

        final PackageManager pm = ctx.getPackageManager();

        try {
            final PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(
                    activityManager.getRunningTasks(1).get(0).topActivity.getPackageName(), 0);

            if (foregroundAppPackageInfo != null) {

                if (foregroundAppPackageInfo.packageName.matches(Constants.GOOGLE_NOW_PACKAGE_NAME)) {
                    return true;
                }
            }

        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
    }

    return false;
}

这是我发现执行此类操作的“最便宜”的方式,但不能保证在未来的操作系统版本中调用上述方法,更不用说必须对您关心的包名称进行硬编码...... .

与永久录制音频相比,监控您知道会与您的应用程序冲突的前台应用程序的“费用”可能有点小,但您应该明智地编码您的实现,以在某些设备条件参数内最小化监控器。

我研究了其他方法来监控与麦克风资源相关的意图广播,但它们的成功率不如上述方法。

请求用户为冲突的应用程序创建一个“排除列表”将允许您动态监控它们是否成为前台应用程序并做出相应的反应。

希望有帮助....

于 2013-11-14T15:06:11.883 回答