[JAVA] [Android] Recevoir une intention avec le récepteur de diffusion

Qu'est-ce que Broadcast Receiver?

--BroadcastReceiver est un mécanisme pour recevoir les intentions de diffusion.

Qu'est-ce que l'intention?

Utilisons

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);
    }
}

Commentaire

--Dans OnReceive de MyReceiver, processus de sortie d'un journal lorsque intent.getAction () correspond à l'action enregistrée d'intentFilter.

Remarques

―― 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

[Android] Recevoir une intention avec le récepteur de diffusion
[Android] Notes sur xml
Personnaliser la vue de liste sur Android
Bibliothèque de transmission en plusieurs parties sur Android
Utiliser la communication série sur Android
Développement d'applications ROS sur Android
Développement Android ~ transition d'écran (intention) ~
Utiliser le code natif sur Android