|
package varunon9.me.dynamicwallpaper; |
|
|
|
import android.app.Notification; |
|
import android.app.NotificationChannel; |
|
import android.app.NotificationManager; |
|
import android.app.PendingIntent; |
|
import android.app.Service; |
|
import android.content.Intent; |
|
import android.os.Build; |
|
import android.os.IBinder; |
|
import android.util.Log; |
|
|
|
import androidx.core.app.NotificationCompat; |
|
|
|
public class MyService extends Service { |
|
private String TAG = "MyService"; |
|
public static boolean isServiceRunning; |
|
private String CHANNEL_ID = "NOTIFICATION_CHANNEL"; |
|
|
|
public MyService() { |
|
Log.d(TAG, "constructor called"); |
|
isServiceRunning = false; |
|
} |
|
|
|
@Override |
|
public void onCreate() { |
|
super.onCreate(); |
|
Log.d(TAG, "onCreate called"); |
|
createNotificationChannel(); |
|
isServiceRunning = true; |
|
} |
|
|
|
@Override |
|
public IBinder onBind(Intent intent) { |
|
return null; |
|
} |
|
|
|
@Override |
|
public int onStartCommand(Intent intent, int flags, int startId) { |
|
Log.d(TAG, "onStartCommand called"); |
|
Intent notificationIntent = new Intent(this, MainActivity.class); |
|
PendingIntent pendingIntent = PendingIntent.getActivity(this, |
|
0, notificationIntent, 0); |
|
Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID) |
|
.setContentTitle("Service is Running") |
|
.setContentText("Listening for Screen Off/On events") |
|
.setSmallIcon(R.drawable.ic_wallpaper_black_24dp) |
|
.setContentIntent(pendingIntent) |
|
.setColor(getResources().getColor(R.color.colorPrimary)) |
|
.build(); |
|
|
|
startForeground(1, notification); |
|
return START_STICKY; |
|
} |
|
|
|
private void createNotificationChannel() { |
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { |
|
String appName = getString(R.string.app_name); |
|
NotificationChannel serviceChannel = new NotificationChannel( |
|
CHANNEL_ID, |
|
appName, |
|
NotificationManager.IMPORTANCE_DEFAULT |
|
); |
|
NotificationManager manager = getSystemService(NotificationManager.class); |
|
manager.createNotificationChannel(serviceChannel); |
|
} |
|
} |
|
|
|
@Override |
|
public void onDestroy() { |
|
Log.d(TAG, "onDestroy called"); |
|
isServiceRunning = false; |
|
stopForeground(true); |
|
|
|
// call MyReceiver which will restart this service via a worker |
|
Intent broadcastIntent = new Intent(this, MyReceiver.class); |
|
sendBroadcast(broadcastIntent); |
|
|
|
super.onDestroy(); |
|
} |
|
} |
The 15 minute worker restart is a safeguard to ensure that the foreground process is restarted in the event that Android kills the process without restarting as it should. If you've got another solution then let's see it.
There's nothing wrong with his service or variable names.
Just imagine being so rude that you attack people that went out of their way to help you.