0

我想检测音频耳机来播放音频文件。但我需要在专辑、艺术家、播放列表等每个选项卡中每次都检测是否连接了耳机。当我尝试这样做时。我正在创建单独的异步任务来检测每个选项卡中的设备。它工作正常。但是如果我给应用程序更多的压力,比如快速切换标签。我的应用程序的 GUI 我被冻结了。我认为它是因为运行更多的线程或线程池被转储了。

所以我有另一个想法,只有一个后台线程会运行来检查设备的连接性和功能。我们需要在应用程序的任何地方分享状态。但我不知道如何实现它。

对此有任何想法或示例代码吗?

也检查这个帖子

4

2 回答 2

0

要检测耳机插头与 USB 检测一样简单,您需要使用操作 android:name="android.intent.action.ACTION_HEADSET_PLUG" />注册接收器,并且接收器将处于活动状态

公共类 PhoneUsbReceiver 扩展 BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Bundle extras = intent.getExtras();

    if (intent.getAction().equalsIgnoreCase(
            "android.intent.action.UMS_CONNECTED")){
        Toast.makeText(context, "Usb-connected..", Toast.LENGTH_SHORT)
                .show();
        Log.i("Arpit", "USB connected..");
    }
    if (intent.getAction().equalsIgnoreCase(
            "android.intent.action.UMS_DISCONNECTED")) {
        Toast.makeText(context, "USB dis-connected..", Toast.LENGTH_SHORT)
                .show();
        Log.i("Arpit", "USB dis-connected..");
    }

    if (intent.getAction().equalsIgnoreCase(
            "android.intent.action.ACTION_HEADSET_PLUG")) {
        Toast.makeText(context, "HEADSET_PLUG-connected..",
                Toast.LENGTH_SHORT).show();
        Log.i("Arpit", "HEADSET_PLUG-connected..");
    }

    if (intent.getIntExtra("state", 0) == 0) {
        Toast.makeText(context, "HEADSET_PLUG-connected..",
                Toast.LENGTH_SHORT).show();
        Log.i("Arpit", "HEADSET_PLUG-connected..");
    } else if (intent.getIntExtra("state", 0) == 1) {
        Toast.makeText(context, "HEADSET_PLUG-dis-connected..",
                Toast.LENGTH_SHORT).show();
        Log.i("Arpit", "HEADSET_PLUG-dis-connected..");
    }

}

}

现在在清单中声明接收者:

<receiver android:name=".PhoneUsbReceiver" >

            <intent-filter >
                <action android:name="android.intent.action.UMS_CONNECTED" />
                <action android:name="android.intent.action.UMS_DISCONNECTED" />

                <action android:name="android.intent.action.ACTION_HEADSET_PLUG" />
            </intent-filter>

        </receiver>
于 2012-07-25T07:36:43.067 回答
0

要在选项卡之间共享数据,您可以创建 HeadphoneHelper 类并将当前状态保存在静态字段中。

例如:

public class HeadphoneHelper {
    private static Boolean connected;

    public static Boolean isConnected() {
        return connected;
    }

    public static Boolean setConnected(Boolean isNowConnected) {
        connected = isNowConnected;
    }


}

然后在您的标签中使用它:

Boolean headphoneConnected = HeadphoneHelper.isConnected();
于 2012-07-25T07:41:03.533 回答