1

USB が抜かれたときに実行中のサービスを停止したい。

私の活動の中で私onCreateはその意図をチェックしますaction

    if (getIntent().getAction().equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
        Log.d(TAG, "************** USB unplugged stopping  service **********");
        Toast.makeText(getBaseContext(), "usb was disconneced", Toast.LENGTH_LONG).show();
        stopService(new Intent(this, myService.class));
    } else {
        init();
    }

そして、私の中にmanifest私は別のものを持っていますintent filter

        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
        </intent-filter>

そして、これintent filterも呼ばれています。

        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />

            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
        </intent-filter>

しかし、デタッチは呼び出されていません。

4

2 に答える 2

5

うーん.. ACTION_USB_DEVICE_DETACHEDUSB デバイス (ケーブルではない) が電話/タブレットから取り外されたときに発生します。これはあなたが望むものではありません。

USB ケーブル接続を検出するための簡単な API があるかどうかはわかりませんが、目的を達成するためACTION_POWER_CONNECTEDに とを使用できます。ACTION_POWER_DISCONNECTED

受信機に次のフィルターを使用します。

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

レシーバーでは、状態を確認し、必要なロジックを実装できます。

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        switch(intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)) {
            case 0: 
                // The device is running on battery
                break;
            case BatteryManager.BATTERY_PLUGGED_AC:
                // Implement your logic
                break;
            case BatteryManager.BATTERY_PLUGGED_USB:
                // Implement your logic
                break;
            case BATTERY_PLUGGED_WIRELESS:
                // Implement your logic
                break;
            default:
                // Unknown state
        }
    }
}
于 2013-06-03T14:17:08.973 に答える
4

BroadcastReceiver を登録する必要があります

    BroadcastReceiver receiver = new BroadcastReceiver() {
       public void onReceive(Context context, Intent intent) {
          if(intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
              Log.d(TAG, "************** USB unplugged stopping  service **********");
              Toast.makeText(getBaseContext(), "usb was disconneced", 
                  Toast.LENGTH_LONG).show();
                  stopService(new Intent(this, myService.class));
           }
        };

    IntentFilter filter = new IntentFilter();
    filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
    registerReceiver(receiver, filter);
于 2013-06-03T14:11:24.713 に答える