标签: headset

Android模拟器 - 如何模拟耳机插入操作

Android模拟器 - 如何模拟耳机插入.

  1. 是否可以模拟插入耳机的动作?

  2. 基本上,我希望这个意图被解雇 - Intent.ACTION_HEADSET_PLUG.除了模拟插入的耳机之外,还有其他方法吗?

android emulation headset

6
推荐指数
1
解决办法
4571
查看次数

如何检测耳机功能

我知道如何检测耳机是否插入,但有些耳机(如三星EHS60ANNBE)来与暂停/播放(又名KeyEvent的.KEYCODE_HEADSETHOOK)按钮,没有了上一页/下一页...

我希望能够检测当前插入Android设备的耳机是否具有PREV/NEXT(又名KeyEvent.KEYCODE_ MEDIA_PREVIOUS /KeyEvent.KEYCODE_ MEDIA_NEXT).

这可能吗?

android headset android-audiomanager

6
推荐指数
1
解决办法
354
查看次数

在Android API中调用私有(未发布)方法

我需要检查OS 2.0 - 2.3中当前连接的BT耳机(不仅仅是配对).在引入蓝牙耳机类的API版本11之前,此类功能不存在.但是在先前的API中已经存在一个名为BluetoothHeadset的类,但它不能公开访问.这是它的文档:http://www.kiwidoc.com/java/l/x/android/android/9/p/android.bluetooth/c/BluetoothHeadset.所以,我试图使用反射来调用"isConnected"方法,但我在反射时非常可怕,而且我收到了一个错误java.lang.IllegalArgumentException: object is not an instance of the class.

我得到了一个使用配对设备的列表BluetoothDevice.getBondedDevices(),我尝试isConnected()在每个设备上使用该方法.这是代码:

public boolean isBtDevConnected(BluetoothDevice btDev){
    boolean connected  = false;
    try {
        Class<?> BTHeadset = Class.forName("android.bluetooth.BluetoothHeadset");
        Method isConnected = BTHeadset.getMethod("isConnected", new Class[] {BluetoothDevice.class});
                connected = isConnected.invoke(BTHeadset, new Object[] {btDev});
            }
        }
    } catch (Exception e) {
        WriteToLog(e);
    }
    return connected;
}
Run Code Online (Sandbox Code Playgroud)

我在调用该方法的行上得到了异常,但我不确定我做错了什么.

reflection android bluetooth headset

5
推荐指数
1
解决办法
3841
查看次数

AudioManager.isWiredHeadsetOn()在android中不起作用

我想检查是否插入了heaset ...我是这样做的

 AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);
 Log.i("am.isWiredHeadsetOn()", am.isWiredHeadsetOn()+"");
Run Code Online (Sandbox Code Playgroud)

但我总是得到虚假的价值......

为什么会这样?

audio android headset android-audiomanager

5
推荐指数
1
解决办法
5112
查看次数

蓝牙耳机:getProfileConnectionState 始终返回连接状态

我正在尝试检查是否有蓝牙耳机连接到设备

    BluetoothAdapter mAdapter;
    mAdapter = BluetoothAdapter.getDefaultAdapter();
    Log.d("TAG","HEADSET: " + mAdapter.getProfileConnectionState(BluetoothProfile.HEADSET));
    Log.d("TAG","HEALTH: " + mAdapter.getProfileConnectionState(BluetoothProfile.HEALTH));
    Log.d("TAG","A2DP: " + mAdapter.getProfileConnectionState(BluetoothProfile.A2DP));
Run Code Online (Sandbox Code Playgroud)

这始终返回 HEADSET 2(已连接)、Health 0(已断开连接)和 A2DP 0(已断开连接)。我是否连接了蓝牙耳机并不重要,只有在禁用蓝牙时,耳机连接状态才为 0

android bluetooth headset

5
推荐指数
0
解决办法
1299
查看次数

蓝牙耳机语音识别不起作用

我正在开发一个应用程序,我必须识别蓝牙耳机语音.我有很多麻烦,但仍然没有得到任何解决方案.

我正在关注此链接:

使用Android识别器内置蓝牙耳机

每次我从它那里得到假的mBluetoothAdapter.getProfileProxy(mContext,mHeadsetProfileListener,BluetoothProfile.HEADSET)

在startBluetooth11()方法中.

请帮忙.

android bluetooth voice-recognition headset

5
推荐指数
0
解决办法
170
查看次数

蓝牙耳机上的 Android 语音识别有时会忽略提示用户说话的蜂鸣声

我的应用程序已经进行了语音识别。一位用户告诉我它不适用于蓝牙耳机。大多数情况下,我能够通过蓝牙耳机进行语音识别(感谢另一位 Stack Overflow 贡献者,而不是官方 Android 文档)。

然而,有一个恼人的问题:当切换到使用蓝牙耳机时,它可能会在切换过程中短暂地消除音频输出。特别是,它有时可以省略通常提示用户进行语音识别的蜂鸣声。

我目前的解决方法是在蓝牙耳机连接到 SCO 音频通道后,在进行语音识别之前延迟一秒钟。

我的问题:有没有更可靠的方法来避免这种冲突?

static AudioManager sAudioManager;
static BluetoothHeadset sBluetoothHeadset;
static BluetoothDevice sBluetoothDevice;

static public void initBluetooth(Context pContext)
{
    sAudioManager = (AudioManager) pContext.getSystemService(Context.AUDIO_SERVICE);

    // Register to get notifications about Bluetooth profiles

    sBluetoothAdapter.getProfileProxy(
        pContext, new BluetoothProfileListener(), BluetoothProfile.HEADSET);

    // Register to receive notification when the headset is dis/connected

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED);
    pContext.registerReceiver(
        new BluetoothHeadsetBroadcastReceiver(), intentFilter);
}

public static void startSpeechRecognition()
{
    sAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
    sAudioManager.startBluetoothSco();
    sAudioManager.setBluetoothScoOn(true);

    sBluetoothHeadset.startVoiceRecognition(sBluetoothDevice);
}

public static void stopSpeechRecognition()
{
    sBluetoothHeadset.stopVoiceRecognition(sBluetoothDevice); …
Run Code Online (Sandbox Code Playgroud)

android speech-recognition bluetooth headset

5
推荐指数
0
解决办法
487
查看次数

从Android上的蓝牙CarKit上显示标题(不是歌曲或艺术家,但是有效的SIP会话)

所以我目前正在开发一个SIP拨号应用程序,我想知道如何更改蓝牙CarKit上显示的信息.我使用以下方法将音频路由到carkit:

    AudioManager localAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    localAudioManager.setMode(0);
    localAudioManager.setBluetoothScoOn(true);
    localAudioManager.startBluetoothSco();
    localAudioManager.setMode(AudioManager.MODE_IN_CALL);
Run Code Online (Sandbox Code Playgroud)

我想知道:我如何在蓝牙设备上设置来电信息?我无法在任何地方找到这个.更清楚这是我在积极对话中看到的:

呼叫

我还使用一个名为PortSIP的 SIP会话库.也许他们对展示什么有影响?我不知道.欢迎任何想法.我已经尝试过搜索AudioManager的选项,我能想象的唯一选择是为audioManager.setParameters()留下空间,但我找不到这个函数的可能键值参数.

更新:还尝试显示trackinfo等信息,但仍然没有成功.这是我试过的代码:

    Intent intent = new Intent("com.android.music.metachanged");
    intent.putExtra("track", "test");
    intent.putExtra("artist", "atest");
    intent.putExtra("album", "btest");
    context.sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

android bluetooth sip phone-call headset

5
推荐指数
1
解决办法
420
查看次数

单击耳机按钮时应用程序崩溃

我已经构建了一个部署在 android google playstore 中的音频播放器。我正在使用 crashlytics 来监控崩溃和 ANR。最近我遇到了很多 MediaButtonReceiver 崩溃的情况。耳机的咔嗒声在许多设备上都能正常工作。但有些设备会出现这个问题。

Crashlytics 报告 -

Fatal Exception: java.lang.RuntimeException: Unable to start receiver android.support.v4.media.session.MediaButtonReceiver: java.lang.IllegalStateException: Could not find any Service that handles android.intent.action.MEDIA_BUTTON or implements a media browser service.
       at android.app.ActivityThread.handleReceiver(ActivityThread.java:2866)
       at android.app.ActivityThread.access$1700(ActivityThread.java:182)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1551)
       at android.os.Handler.dispatchMessage(Handler.java:111)
       at android.os.Looper.loop(Looper.java:194)
       at android.app.ActivityThread.main(ActivityThread.java:5706)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1033)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)
Run Code Online (Sandbox Code Playgroud)

媒体会话代码 -

private void initMediaSession() throws RemoteException {
        if (mediaSessionManager != null) return; //mediaSessionManager exists

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mediaSessionManager = (MediaSessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE); …
Run Code Online (Sandbox Code Playgroud)

android audio-player headset android-mediaplayer android-mediasession

5
推荐指数
1
解决办法
2184
查看次数

处理 Android 蓝牙耳机按钮

这个话题有时会弹出,但我不能让那个东西工作。我的应用程序曾经处理媒体按钮,但 Android 5.0 之后的 API 发生了变化,它需要调整此应用程序以“捕获”蓝牙按钮并以“我的方式”处理它们。

我做了很多搜索,发现:

        final MediaSession session = new MediaSession(this, "spy tag");

    session.setCallback(new MediaSession.Callback() {
        @Override
        public boolean onMediaButtonEvent(final Intent mediaButtonIntent) {
            Toast.makeText(me, "on media button event", Toast.LENGTH_SHORT);
            Log.i("TAG", "GOT EVENT");
            return super.onMediaButtonEvent(mediaButtonIntent);
        }

    });

    session.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS |
            MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);

    PlaybackState state = new PlaybackState.Builder()
            .setActions(
                    PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PLAY_PAUSE |
                            PlaybackState.ACTION_PLAY_FROM_MEDIA_ID | PlaybackState.ACTION_PAUSE |
                            PlaybackState.ACTION_SKIP_TO_NEXT | PlaybackState.ACTION_SKIP_TO_PREVIOUS)
            .setState(PlaybackState.STATE_PLAYING, 0, 1)
            .build();
    session.setPlaybackState(state);

    session.setActive(true);
Run Code Online (Sandbox Code Playgroud)

但是……还是不行。每当我按下任何媒体按钮时,我都会在 Logcat 中得到这个:

2019-06-16 19:40:14.458 2936-4422/? D/MediaSessionService:发送 KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_MEDIA_NEXT, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=0, …

android bluetooth headset media-buttons

5
推荐指数
0
解决办法
390
查看次数