BroadcastReceiver实现唤起已关闭应用的功能

来源:互联网 发布:51单片机时钟电路图 编辑:程序博客网 时间:2024/05/21 18:42

实现的功能:监听屏幕解锁,唤起未开启的应用

特别注明:
在Android3.1以后,系统对广播接受进行了新的限制:

  1. 如果是新应用,需要手动开启一次才能接收到广播。
  2. 如果应用被用户从“后台进程管理器”中杀死,也将无法接收到广播。
  3. 不能静态注册的广播包含:
    a.android.intent.action.SCREEN_ON
    b.android.intent.action.SCREEN_OFF
    c.android.intent.action.BATTERY_CHANGED
    d.android.intent.action.CONFIGURATION_CHANGED
    e.android.intent.action.TIME_TICK
    网址:
    https://developer.android.google.cn/reference/android/content/Intent.html

功能实现思路:
在Activity中,开启一个Service;在该Service中开启一个BroadcaseReceiver,实现监听屏幕解锁功能。

Service实现类:

public class BroadCastReceiverService extends Service {    private Context context;    private Intent intentActivity;    public BroadCastReceiverService(){    }    @Nullable    @Override    public IBinder onBind(Intent intent) {        return null;    }    @Override    public void onCreate() {        super.onCreate();        intentActivity = new Intent();        intentActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        intentActivity.setClass(BroadCastReceiverService.this,SecondActivity.class);        /* 注册屏幕唤醒时的广播 */        IntentFilter mScreenOnFilter = new IntentFilter("android.intent.action.SCREEN_ON");        BroadCastReceiverService.this.registerReceiver( screenOnBroadCaseReceive, mScreenOnFilter);    }    ScreenOnBroadCaseReceive screenOnBroadCaseReceive = new ScreenOnBroadCaseReceive();    @Override    public void onDestroy() {        super.onDestroy();        BroadCastReceiverService.this.unregisterReceiver(screenOnBroadCaseReceive);        startService(new Intent(context,BroadCastReceiverService.class));    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        return Service.START_STICKY;    }    class ScreenOnBroadCaseReceive extends BroadcastReceiver{        @Override        public void onReceive(Context context, Intent intent) {            String action = intent.getAction();            if (action.equals("android.intent.action.SCREEN_ON")){                startActivity(intentActivity);            }        }    }    //记住Service要在Manifest当中注册

MainActivity类:

public class MainActivity extends AppCompatActivity {    private Button buttonClick;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        buttonClick = (Button) findViewById(R.id.buttonClick);        buttonClick.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent serviceIntent = new Intent();                serviceIntent.setClass(MainActivity.this,BroadCastReceiverService.class);                MainActivity.this.startService(serviceIntent);            }        });    }    @Override    protected void onDestroy() {        super.onDestroy();        Toast.makeText(this,"onDestroy",Toast.LENGTH_LONG).show();    }}

参考:
http://www.cnblogs.com/xxq1991/p/3688492.html
https://developer.android.google.cn/reference/android/content/Intent.html

原创粉丝点击