电话事件和语音命令的监听器

时间:2013-11-12 15:42:25

标签: android listener voice-recognition audiorecord

我的应用程序在后台模式下使用麦克风(AudioRecord),如何为手机事件和语音命令(如谷歌语音)制作听众。我必须释放麦克风(AudioRecord)才能使用。

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

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

1 个答案:

答案 0 :(得分: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;
}

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

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

我已经调查了与monitor intent broadcasts相关的其他与麦克风资源相关的方法,但它们的成功效果不如上述。

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

希望有所帮助....