0

オーディオファイルを再生するためにオーディオヘッドフォンを検出したい。しかし、アルバム、アーティスト、プレイリストなどの各タブで毎回イヤホンが接続されているかどうかを検出する必要があります。各タブでデバイスを検出するために個別の asynctask を作成しています。その正常に動作します。しかし、タブをすばやく切り替えるなど、アプリケーションにより多くのストレスを与えている場合。アプリの GUI がフリーズします。より多くのスレッドまたはスレッドプールを実行しているため、ダンプされたと思います。

したがって、デバイスの接続と機能をチェックするために実行されるバックグラウンド スレッドは 1 つだけであるという別の考えがあります。アプリ内のあらゆる場所でステータスを共有する必要があります。しかし、私はそれを実装する方法がわかりません。

これに関するアイデアやサンプルコードはありますか?

この投稿もチェックしてください。

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 に答える