我的应用在后台模式下使用麦克风(AudioRecord),如何制作电话事件和语音命令的监听器(如谷歌语音)。我需要释放一个麦克风(AudioRecord)以供使用。
我找到了电话事件的解决方案:http: //www.botskool.com/geeks/how-listen-phone-events-android。使用: TelephonyManager , PhoneStateListener。
但不是语音命令。请帮忙。
我的应用在后台模式下使用麦克风(AudioRecord),如何制作电话事件和语音命令的监听器(如谷歌语音)。我需要释放一个麦克风(AudioRecord)以供使用。
我找到了电话事件的解决方案:http: //www.botskool.com/geeks/how-listen-phone-events-android。使用: 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;
}
这是我发现执行此类操作的“最便宜”的方式,但不能保证在未来的操作系统版本中调用上述方法,更不用说必须对您关心的包名称进行硬编码...... .
与永久录制音频相比,监控您知道会与您的应用程序冲突的前台应用程序的“费用”可能有点小,但您应该明智地编码您的实现,以在某些设备条件参数内最小化监控器。
我研究了其他方法来监控与麦克风资源相关的意图广播,但它们的成功率不如上述方法。
请求用户为冲突的应用程序创建一个“排除列表”将允许您动态监控它们是否成为前台应用程序并做出相应的反应。
希望有帮助....