gpt4 book ai didi

android - 拔下 USB 设备时停止服务

转载 作者:行者123 更新时间:2023-11-29 14:27:55 25 4
gpt4 key购买 nike

我想在拔掉 USB 时停止正在运行的服务。

在我的 Activity onCreate 中,我检查其 action 的 Intent

    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();
}

在我的 list 里面我有另一个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>

但是分离并没有被调用。

最佳答案

Hmmm.. 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>

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

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
}
}
}

关于android - 拔下 USB 设备时停止服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16898278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com