我想检测音频耳机来播放音频文件。但我需要在专辑、艺术家、播放列表等每个选项卡中每次都检测是否连接了耳机。当我尝试这样做时。我正在创建单独的异步任务来检测每个选项卡中的设备。它工作正常。但是如果我给应用程序更多的压力,比如快速切换标签。我的应用程序的 GUI 我被冻结了。我认为它是因为运行更多的线程或线程池被转储了。
所以我有另一个想法,只有一个后台线程会运行来检查设备的连接性和功能。我们需要在应用程序的任何地方分享状态。但我不知道如何实现它。
对此有任何想法或示例代码吗?
也检查这个帖子。
要检测耳机插头与 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>
要在选项卡之间共享数据,您可以创建 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();