在做一个程序的时候,需要时刻保持某一服务是启动的,因此想到了通过监听屏幕SCREEN_ON和SCREEN_OFF这两个action。奇怪的是,这两个action只能通过代码的形式注册,才能被监听到,使用AndroidManifest.xml 完全监听不到。查了一下,发现这是PowerManager那边在发这个广播的时候,做了限制,限制只能有register到代码中的receiver才能接收。
下面直接上代码了:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
registerScreenReciver_off();//屏幕关闭
registerScreenReciver_on();//屏幕亮着
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/**
* 屏幕关闭的监听器注册与广播接受者
*/
private void registerScreenReciver_off(){
final IntentFilter filter=new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(OFFReceiver, filter);
}
final BroadcastReceiver OFFReceiver =new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
TipHelper helper=new TipHelper(context);
helper.Vibrate(2000);//实现手机震动
}};
/**
* 屏幕亮起的监听器注册和广播接收者
*/
private void registerScreenReciver_on(){
final IntentFilter filter=new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(OFFReceiver, filter);
}
final BroadcastReceiver ONReceiver =new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
TipHelper helper=new TipHelper(context);
helper.Vibrate(2000);//实现手机震动
}};
}
震动实现方法 记得添加震动的权限点击打开链接