拔下USB设备时停止服务

use*_*676 1 android

我想在拔掉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();
    }
Run Code Online (Sandbox Code Playgroud)

在我的内心,我manifest有另一个intent filter

        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
        </intent-filter>
Run Code Online (Sandbox Code Playgroud)

而且这intent filter也被称为.

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

            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
        </intent-filter>
Run Code Online (Sandbox Code Playgroud)

但这个分离并未被召唤.

ozb*_*bek 5

ACTION_USB_DEVICE_DETACHED当USB设备(不是电缆)与手机/平板电脑分离时,会发出嗯.. 这不是你想要的.

我不知道是否有用于检测USB电缆连接的直接API,但您可以使用ACTION_POWER_CONNECTEDACTION_POWER_DISCONNECTED实现目标.

使用以下过滤器为您的接收器:

<intent-filter>
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

在接收器中,您可以检查状态并实现您想要的逻辑:

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)