是否可以从 iPhone 的内置麦克风接收音频输入,并同时通过蓝牙耳机播放该音频?
我的目标是始终使用内置麦克风作为输入设备,即使输出设备是耳机,因为内置麦克风在我的用例中更方便。
当输出设备是有线耳机时,我知道如何实现我的目标,比如与 iPhone 捆绑在一起的耳机。我只需插入有线耳机,然后调用以下方法:
- (void)selectBuiltInMicrophone
{
AVAudioSession *session = [AVAudioSession sharedInstance];
for (AVAudioSessionPortDescription *port in session.availableInputs)
if ([port.portType isEqualToString:AVAudioSessionPortBuiltInMic]) {
NSError *error;
[session setPreferredInput:port error:&error];
break;
}
}
Run Code Online (Sandbox Code Playgroud)
通过调用上述方法,输入设备将从有线耳机的麦克风切换到iPhone的内置麦克风,而输出设备不受影响,因此iPhone将从内置麦克风录音并通过有线耳机播放。这是我所期望的。
问题是,当耳机是蓝牙耳机时,这种方法不起作用。如果我把蓝牙耳机连接到iPhone,然后调用上面的方法,内置麦克风会变成输入设备,这很好,但输出设备也会变成iPhone的接收器,这很糟糕。
蓝牙耳机的输入和输出似乎被锁定在一起:您要么同时使用它们,要么不使用它们。我的目标真的不可能吗?或者有没有办法克服明显的限制?
在Notification课程文件中我看到了这个:
public PendingIntent contentIntent
单击展开状态条目时执行的意图.如果这是一个活动,它必须包含
FLAG_ACTIVITY_NEW_TASK标志,这需要您按照任务和后退堆栈文档中的描述来处理任务管理.特别是,请务必阅读通知部分处理通知,了解从通知启动应用程序的正确方法.
我已经阅读了上面链接的材料,但我仍然没有得到它.FLAG_ACTIVITY_NEW_TASK单击通知时,为什么要启动活动时需要标记?我尝试了以下代码:
NotificationManager manager = (NotificationManager)context.
getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(
android.R.drawable.stat_notify_sync, title,
System.currentTimeMillis());
notification.flags |= Notification.FLAG_AUTO_CANCEL;
Intent intent = new Intent(context, NotifiedActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // IS THIS REALLY REQUIRED??
PendingIntent pt = PendingIntent.getActivity(context, 0, intent, 0);
notification.setLatestEventInfo(context, title, text, pt);
manager.notify(0, notification);
Run Code Online (Sandbox Code Playgroud)
我运行上面的代码,无论是否intent.setFlags有线,似乎没有区别.实际上,我发现的许多代码示例都没有这一行.那么为什么文档说FLAG_ACTIVITY_NEW_TASK标志是必须的,它在通知处理方面究竟有什么不同呢?