我在网上搜索了很多时间,我不明白为什么我的自定义广播 没有工作。
<receiver
android:name=".myservice.MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
<action android:name="android.intent.action.BATTERY_CHANGED"/>
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.SCREEN_OFF" />
</intent-filter>
</receiver>
当我重新连接并断开充电器时,我不接受它。
我这样做是为了让事情变得简单
public class MyReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context,"Battery", Toast.LENGTH_SHORT).show();
Log.i("Recive", "Yes");
}
}
答案 0 :(得分:1)
来自docs:
ACTION_BATTERY_CHANGED 广播操作:这是一个粘性广播,包含有关电池的充电状态,电平和其他信息。有关Intent内容的文档,请参阅BatteryManager。
只有通过使用Context.registerReceiver()显式注册它,才能通过清单中声明的组件来接收它。请参阅ACTION_BATTERY_LOW,ACTION_BATTERY_OKAY,ACTION_POWER_CONNECTED和ACTION_POWER_DISCONNECTED,了解发送并可通过清单接收器接收的不同电池相关广播
因此,您无法在BroadcastReceiver
中使用此Manifest
decalred,只能从您的上下文中明确注册。
此外,您的电源连接BroadcastReceiver
似乎也是正确的。尝试将其分成另一个BroadcastReceiver
,可能行动ACTION_BATTERY_CHANGED
正在干扰其他行为。
这是我使用的BroadcastReceiver
,我在我的应用中使用它。
<receiver android:name=".PowerConnectionBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
<强> PowerConnectionBroadcastReceiver 强>
public class PowerConnectionBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "PowerRcvr";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_POWER_CONNECTED)) {
Log.d(TAG, "Device is charging");
} else if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) {
Log.d(TAG, "Device is NOT charging");
} else {
Log.d(TAG, "Unable to check if device is charging or not");
}
}
}
注意:此代码适用于Android 8,其targetSdkVersion为25或更低。
在targetSdkVersion 26或更高版本中,由于背景限制,大多数BroadcastReceivers
无法通过Manifest
工作。以下是documentation(感谢Pawel)。所以你的IntentFilters
不会工作。为了使其正常工作,您可以将targetSdkVersion下载到25或更低。