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

Android 电话事件和语音命令的侦听器,android,listener,voice-recognition,audiorecord,Android,Listener,Voice Recognition,Audiorecord,我的应用程序在后台模式下使用麦克风(录音),如何让听众收听电话事件和语音命令(如谷歌语音)。我需要释放麦克风(录音)以供使用 我找到了电话事件的解决方案:。 要使用:TelephonyManager、PhoneStateListener 但不是发出命令。请帮忙 没有具体的方法可以做到这一点(不幸的是),只有尝试使用麦克风资源的应用程序才会出错 你能做的就是监视用户在后台做什么,并做出相应的反应。下面是检查Google Now是否已成为前台应用程序的代码: public static boolea

我的应用程序在后台模式下使用麦克风(录音),如何让听众收听电话事件和语音命令(如谷歌语音)。我需要释放麦克风(录音)以供使用

我找到了电话事件的解决方案:。 要使用:TelephonyManager、PhoneStateListener


但不是发出命令。请帮忙

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

你能做的就是监视用户在后台做什么,并做出相应的反应。下面是检查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;
}
这是我发现的执行此类操作的最“昂贵”的方式,但不能保证在未来的操作系统版本中调用上述方法,更不用说必须硬编码您关心的包名了

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

我已经研究过其他与话筒资源相关的方法,但是它们没有上面提到的那么成功

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


希望这有助于

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

你能做的就是监视用户在后台做什么,并做出相应的反应。下面是检查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;
}
这是我发现的执行此类操作的最“昂贵”的方式,但不能保证在未来的操作系统版本中调用上述方法,更不用说必须硬编码您关心的包名了

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

我已经研究过其他与话筒资源相关的方法,但是它们没有上面提到的那么成功

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

希望这有助于