Hello I am new to android and I am trying to make an app that will check battery status when device is charging . if battery level is more than defined in setting than it will show a notification and will also ring .
I am now just testing it and showing notification
after every 30 second
after device is plugged in . according my logic alarm manger
will set when device is plugged in and will cancel pending of alarm manager
when device is plugged out
.
But it is not working, notification is also showing after disconnecting device
. I don't know why it is happening . I have tried to cancel pending but it is not working.
please help me what is going on here.
CustomReceiver
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;
}
}
}
BroadCast reciever for notification
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());
}
}
manifest file
<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>
sorry for bad English .