Activity:
package com.itheima.register; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(this, RegisterService.class); } public void start(View v){ startService(intent); } public void stop(View v){ stopService(intent); } } /* 服务清单文件注册: <service android:name="com.itheima.register.RegisterService"></service>*/
service:
package com.itheima.register; import android.app.Service; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; public class RegisterService extends Service { private ScreenReceiver receiver; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { super.onCreate(); //1.创建广播接收者对象 receiver = new ScreenReceiver(); //2.创建intent-filter对象 IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_OFF);//屏幕锁屏 filter.addAction(Intent.ACTION_SCREEN_ON);//屏幕解锁 //3.注册广播接收者 registerReceiver(receiver, filter); } @Override public void onDestroy() { super.onDestroy(); //解除注册 unregisterReceiver(receiver); } }
广播接收者:
package com.itheima.register; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class ScreenReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); if(Intent.ACTION_SCREEN_OFF.equals(action)){ System.out.println("屏幕关闭"); } else if(Intent.ACTION_SCREEN_ON.equals(action)){ System.out.println("屏幕打开"); } } }
#使用代码配置广播接收者,但是服务只能在清单文件注册不能代码注册。
* 可以使用清单文件注册
* 广播一旦发出,系统就会去所有清单文件中寻找,哪个广播接收者的action和广播的action是匹配的,如果找到了,就把该广播接收者的进程启动起来,广播接受者一旦通过清单文件部署在手机就永远生效。
* 可以使用代码注册
* 需要使用广播接收者时,执行注册的代码,不需要时,执行解除注册的代码
###特殊的广播接收者
* 安卓中有一些广播接收者,必须使用代码注册,清单文件注册是无效的
1. 屏幕锁屏和解锁,用的很频繁,因此接收这些广播的接受者不用一直监听。
2. 电量改变