跨应用程序的Android :: Background Thread

时间:2012-07-25 07:29:29

标签: android

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

所以我还有一个想法,就是只运行一个后台线程来检查设备连接和功能。我们需要在应用程序中的任何位置共享状态。但我不知道如何实现它。

关于此的任何想法或示例代码?

同时检查this Post

2 个答案:

答案 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();