1. ホーム
  2. Android

サービスを利用した特別な放送受信者の登録

2022-02-17 06:31:35

1. Androidシステムの操作で特に頻度の高いブロードキャストイベントである画面ロック解除とロック画面
2.マニフェストファイルでの登録は無効、コードで登録する必要がある
3. MainActivityに登録すると、MainActivityが破壊されたときにブロードキャストを受信できない。
4. 放送受信機のサービス登録を検討する

MainActivityです。

package com.itheima74.rigisterservice;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//Open the service
		Intent intent = new Intent(this,ScreenService.class);
		startService(intent);

	}

}


ScreenReceiverです。

package com.itheima74.rigisterservice;

import android.content;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class ScreenReceiver extends BroadcastReceiver {
	// Execute this method when the screen is locked or unlocked
	@Override
	public void onReceive(Context context, Intent intent) {
		String action = intent.getAction();
		if ("android.intent.action.SCREEN_OFF".equals(action)) {
			Log.i("Phone is locked");
		} else if ("android.intent.action.SCREEN_ON".equals(action)) {
			Log.i("Phone is unlocked");
		}
	}

}


ScreenServiceです。

package com.itheima74.rigisterservice;

import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;

public class ScreenService extends Service {
	private ScreenReceiver receiver;
	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	@Override
	public void onCreate() {
		super.onCreate();
		// Why not register in the Mainactivity?
		// Because the special broadcast receiver is not valid after the Mainactivity exits, it needs to run in the background for a long time
		receiver = new ScreenReceiver();
		IntentFilter filter = new IntentFilter();
		filter.addAction("android.intent.action.SCREEN_OFF");
		filter.addAction("android.intent.action.SCREEN_ON");
		registerReceiver(receiver, filter);
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		unregisterReceiver(receiver);
	}
}