--BroadcastReceiver est un mécanisme pour recevoir les intentions de diffusion.
J'ai démarré le service à partir de l'activité → J'ai essayé d'enregistrer le récepteur auprès du service
MyReceiver.java
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.d("registerReceiver: ", "ON");
}
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Log.d("registerReceiver: ", "OFF");
}
}
}
}
MyActivity.java
public class MyActivity extends Activity {
Button startButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startButton = (Button)findViewById(R.id.start_button);
startButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(new Intent(this(), MyService.class));
} else {
startService(new Intent(this(), MyService.class));
}
}
}
}
MyService.java
public class MyService extends Service {
private MyReceiver mReceiver;
private IntentFilter mIntentFilter;
@Override
public void onCreate() {
super.onCreate();
//Effectuer l'enregistrement du récepteur
registerScreenReceiver();
}
@Override
public void onDestroy() {
super.onDestroy();
//Libérer le récepteur
unregisterReceiver(mReceiver);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startInForeground();
return START_STICKY;
}
//Enregistrer le récepteur
private void registerScreenReceiver() {
mReceiver = new MyReceiver();
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(Intent.ACTION_SCREEN_ON);
mIntentFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(mReceiver, mIntentFilter);
}
//Générer des notifications pour faire vivre le service
private void startInForeground() {
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(getResources().getString(R.string.app_name))
.setContentText("test notification")
.setTicker(getResources().getString(R.string.app_name))
.setContentIntent(pendingIntent);
Notification notification = builder.build();
if (Build.VERSION.SDK_INT >= 26) {
NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID
, NOTIFICATION_CHANNEL_NAME
, NotificationManager.IMPORTANCE_DEFAULT);
channel.setDescription(NOTIFICATION_CHANNEL_DESC);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (notificationManager != null) {
notificationManager.createNotificationChannel(channel);
}
}
startForeground(NOTIFICATION_ID, notification);
}
}
--Dans OnReceive de MyReceiver, processus de sortie d'un journal lorsque intent.getAction () correspond à l'action enregistrée d'intentFilter.
―― Comme je regarde souvent le plus grand nombre d'applications de journal de vie et de soins de santé, je me demandais comment les données étaient agrégées, mais je sentais qu'il y avait de nombreux modèles utilisant l'intention, alors je l'ai étudié. ――Il y a tellement d'intentions autres que celles introduites cette fois, donc certaines applications peuvent être utiles ...
Recommended Posts