我的应用程序在后台模式下使用麦克风(AudioRecord),如何为手机事件和语音命令(如谷歌语音)制作听众。我必须释放麦克风(AudioRecord)才能使用。
我找到了电话活动的解决方案:http://www.botskool.com/geeks/how-listen-phone-events-android。 使用:TelephonyManager,PhoneStateListener。
但不是语音命令。请帮忙。
答案 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相关的其他与麦克风资源相关的方法,但它们的成功效果不如上述。
请求用户为冲突的应用程序创建“排除列表”,这将允许您动态监视它们是否成为前台应用程序并做出相应的反应。
希望有所帮助....