您好,我是 android 新手,我正在尝试制作一个在设备充电时检查电池状态的应用程序。如果电池电量超过设置中的定义,它将显示通知并响铃。
我现在只是在测试它,并且showing notification
在每次30 second
插入设备之后。根据我的逻辑alarm manger
,将在插入设备时设置,并在设备插入时cancel pending of alarm manager
设置plugged out
。
但它不起作用,通知也显示after disconnecting device
。我不知道为什么会这样。我试图取消挂起,但它不起作用。
请帮助我这里发生了什么。
自定义接收器
public class CustomReceiver extends BroadcastReceiver {
AlarmManager alarmManager;
PendingIntent p;
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
if (intentAction != null) {
if (intentAction.equals(Intent.ACTION_POWER_CONNECTED)) {
toast("Power Connected", context);
setBatteryAlarm(context);
}
if (intentAction.equals(Intent.ACTION_POWER_DISCONNECTED)) {
toast("Power Disconneted", context);
cancelAlarm();
}
}
}
public void toast(String msg, Context context) {
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
private void setBatteryAlarm(Context context) {
Intent notifyIntent = new Intent(context, BatteryCheckingReciever.class);
p = PendingIntent.getBroadcast(context, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
long repeatInterval = 30000;
long triggerTime = SystemClock.elapsedRealtime() + repeatInterval;
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime, repeatInterval, p);
}
private void cancelAlarm() {
Log.e("kiran", "canceling alarm");
if (alarmManager != null) {
alarmManager.cancel(p);
alarmManager = null;
}
}
}
用于通知的广播接收器
public class BatteryCheckingReciever extends BroadcastReceiver {
NotificationManager notificationManager;
int NOTIFICATION_ID = 0;
String PRIMARY_CHANNEL = "battery_is_full";
@Override
public void onReceive(Context context, Intent intent) {
showNotificaiton(context);
}
private void showNotificaiton(Context context) {
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, PRIMARY_CHANNEL)
.setSmallIcon(R.drawable.ic_battery_full)
.setContentTitle(context.getString(R.string.battery_full))
.setContentText(context.getString(R.string.battery_full_text))
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setAutoCancel(true)
.setDefaults(NotificationCompat.DEFAULT_ALL);
notificationManager.notify(NOTIFICATION_ID, builder.build());
}
}
清单文件
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver
android:name=".BatteryCheckingReciever"
android:enabled="true"
android:exported="true"></receiver>
<receiver
android:name=".CustomReceiver"
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" />
</intent-filter>
</receiver>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
抱歉英语不好。