【发布时间】:2015-11-26 21:42:21
【问题描述】:
当用户plug or unplug 其手机时,我正在尝试run code。
我想我可以通过创建一个广播接收器并将 Manifest 中的触发器设置为 android.intent.action.BOOT_COMPLETED 来实现这一点。
然后从该 BOOT_COMPLETED RECEIVER 启动一个服务并启动调试消息。
我从服务中为android.intent.action.ACTION_POWER_CONNECTED 和android.intent.action.ACTION_POWER_DISCONNECTED 启动了另一个广播接收器。
一切顺利,调试消息被广播,服务为ACTION_POWER广播接收器执行了启动过程,但接收器没有触发。
有人知道如何解决它吗?
代码:
清单:
<application
...
<receiver
android:name="de.mrglue.nfc.BootReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
<service android:name="de.mrglue.nfc.BootService" >
</service>
</application>
<receiver android:name=".PowerConnectionReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
引导接收器:
public class BootReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//Can't toast here
//Starting service
context.startService(new Intent(context, BootService.class));
}
服务:
public class BootService extends Service{
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Starting second Receiver!", Toast.LENGTH_LONG).show();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(new PowerConnectionReceiver(), filter);
Toast.makeText(this, "done!", Toast.LENGTH_LONG).show();
stopSelf();
return START_NOT_STICKY;
}
}
电池接收器:
public class PowerConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
Toast.makeText(context, "CHARGE" + isCharging, Toast.LENGTH_LONG).show();
}
}
【问题讨论】: