我有自己BroadcastReceiver的Intent.ACTION_HEADSET_PLUG行动实例.实际物理拔出耳机与我BroadcastReceiver收到通知的时刻之间有大约1-2秒的延迟.
IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY - 1);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// my code here
}
}, filter);
Run Code Online (Sandbox Code Playgroud)
任何想法如何减少延迟?
在我的项目中,我AVAudioSession用来检测任何耳机已插入或拔出.但在这种情况下,我无法检测何时插入蓝牙设备.这是我的耳机状态代码.
- (void)audioRouteChangeListenerCallback:(NSNotification*)notification
{
NSDictionary *interuptionDict = notification.userInfo;
NSInteger routeChangeReason = [[interuptionDict valueForKey:AVAudioSessionRouteChangeReasonKey] integerValue];
switch (routeChangeReason) {
case AVAudioSessionRouteChangeReasonNewDeviceAvailable:
//NSLog(@"AVAudioSessionRouteChangeReasonNewDeviceAvailable");
NSLog(@"Headphone/Line plugged in");
[_soundButtonOutlet setImage:[UIImage imageNamed:@"sound-on.png"] forState:UIControlStateNormal];
_headSetState=YES;
break;
case AVAudioSessionRouteChangeReasonOldDeviceUnavailable:
NSLog(@"AVAudioSessionRouteChangeReasonOldDeviceUnavailable");
NSLog(@"Headphone/Line was pulled. Stopping player....");
[_soundButtonOutlet setImage:[UIImage imageNamed:@"sound-off.png"] forState:UIControlStateNormal];
if(_isPlaying==YES)
{
[self.player pause];
[_audioButtonOutlet setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
_isPlaying=NO;
}
_headSetState=NO;
break;
case AVAudioSessionRouteChangeReasonCategoryChange:
// called at start - also when other audio wants to play
NSLog(@"AVAudioSessionRouteChangeReasonCategoryChange");
break;
}
- (BOOL)isHeadsetPluggedIn
{
AVAudioSessionRouteDescription* route = [[AVAudioSession sharedInstance] …Run Code Online (Sandbox Code Playgroud) 我知道这是一个已经问过的问题,我发现可能有重复:
...以及有关WWW的更多信息.但是我已经尝试了每个解决方案,每次我遇到问题时,可能是因为它们是旧线程并且指的是iOS 4.如何在iOS 5.0上检测到它?谢谢
我想处理来自标准蓝牙单声道耳机的 AT 命令(用于双击事件)。默认情况下,双击向话机发送 AT+BLDN 命令(重拨事件)。根据Android文档,注册一个广播接收器
android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT
将处理所有此类供应商相关的 AT 命令。但是,当耳机发送 AT 命令时,它不会被调用。但是,重拨事件发生在电话上。
我想模拟进入throgh设置 - >无线 - >蓝牙的动作,并以编程方式连接配对的蓝牙耳机.我已经做了在#1和谷歌一些搜索,都表明存在API级别之前没有可用的解决方案11.不过,我感兴趣的是通过蓝牙实现Android系统的源代码偷看工作吧.问题是我不知道应该检查哪些具体的源代码.有什么建议?非常感谢.
如何检查耳机中的播放/暂停按钮是否被单击?之后,我可以实现一些方法来改变自己的动作(关机等)的典型动作(播放/暂停)吗?
headset ×6
android ×4
bluetooth ×3
at-command ×1
audiosession ×1
ios ×1
ios8 ×1
objective-c ×1