我想检测音频耳机播放音频文件。但我需要在每个标签中检测到耳机是否连接,如专辑,艺术家,播放列表等。我在尝试这样做时。我正在创建单独的asynctask来检测每个选项卡中的设备。它的工作正常。但如果我给应用程序施加更多压力,比如快速更换标签。我的应用程序的GUI我被冻结了。我认为它因运行更多线程或线程池而被抛弃。
所以我还有一个想法,就是只运行一个后台线程来检查设备连接和功能。我们需要在应用程序中的任何位置共享状态。但我不知道如何实现它。
关于此的任何想法或示例代码?
同时检查this Post。
答案 0 :(得分: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>
答案 1 :(得分:0)
要在标签之间共享数据,您可以创建一个Headphone Helper类并将当前状态保持在静态字段中。
e.g:
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();