android常驻型广播,Android 常驻广播和非常驻广播

一、知识准备

①常驻广播接受者:使用AndroidManifest.xml注册,接受者不随Activity的销毁而销毁,也就是拥有独立的生命周期。

②非常驻广播接受者:使用registerReceiver(receiver,intentfilter)对广播接收者进行注册。同事需要使用unregisterReceiver(receiver)注销这个广播接收者。注册时表示创建广播接收者,注销时表示销毁这个广播接收者。生命周期由开发者决定。通常在activity的onCreate方法中创建广播接收者,在onDestroy中销毁广播接收者。生命周期可控。

③建议了解http://www.cnblogs.com/xqz0618/p/msg_broadcast.html

二、项目案例一

【标题】利用非常驻广播接受收到短信的广播

【步骤】

①创建一个广播NReceiver

②在Activity中进行注册

③在Activity销毁时注销

【项目结构】

10cc7dc2ab64780c6cdbf87d252aa228.png

【NReceiver】

64233b8f90ee28486c89b8660cd757fd.png

【MainActivity】

1 importandroid.Manifest;2 importandroid.content.BroadcastReceiver;3 importandroid.content.IntentFilter;4 importandroid.content.pm.PackageManager;5 importandroid.support.v4.app.ActivityCompat;6 importandroid.support.v4.content.ContextCompat;7 importandroid.support.v7.app.AppCompatActivity;8 importandroid.os.Bundle;9 importandroid.util.Log;10

11 importcom.example.administrator.myapplication.receiver.NReceiver;12

13 public class MainActivity extendsAppCompatActivity {14

15 BroadcastReceiver receiver = null;16

17 @Override18 protected voidonCreate(Bundle savedInstanceState) {19 super.onCreate(savedInstanceState);20 setContentView(R.layout.activity_main);21 getpermission();22

23 registerBroadcast();24

25 }26

27 private voidgetpermission() {28 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_SMS)29 != PackageManager.PERMISSION_GRANTED||ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.RECEIVE_SMS)30 !=PackageManager.PERMISSION_GRANTED){31 ActivityCompat.requestPermissions(MainActivity.this,newString[]{32 Manifest.permission.READ_SMS,Manifest.permission.RECEIVE_SMS33 },1);34 }35 }36

37 private voidregisterBroadcast() {38 receiver = newNReceiver();39 IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");40 registerReceiver(receiver,filter);41 Log.i("TAG", "registerBroadcast: ---------register");42 }43

44 @Override45 protected voidonDestroy() {46 super.onDestroy();47 unregisterReceiver(receiver);48 }49 }

【提示】由于是要接收短信的广播,所以需要获取权限

【AndroidManifest】

1

2

【提示】非常驻型广播无需在AndroidManifest中进行注册广播。

【效果】

①利用模拟器开发工具模拟发送信息

f42c395fb14a2129652db84468155931.png

dcc172c258a567dccccde69de760a08e.png

②将APP完全退出,再发送信息,不再收到提示

5bf1071ff21ec1973dc4e9a7077aadc6.png

e1a36952b772af3f4a8b1346c9f6cbc0.png

二、项目案例二

【标题】常驻型广播接收收到短信的广播

【提示】再项目一得基础上修改

【AndroidManifest】注册

1

3 android:enabled="true"

4 android:exported="true">

5

6

7

8

【MainActivity】

【提示】由于常驻型广播已经在AndroidManifest注册,则无须利用registerReceiver(receiver,intentfilter)进行注册和销毁。Activity中只需进行动态权限的申请

1 public class MainActivity extendsAppCompatActivity {2

3 BroadcastReceiver receiver = null;4

5 @Override6 protected voidonCreate(Bundle savedInstanceState) {7 super.onCreate(savedInstanceState);8 setContentView(R.layout.activity_main);9 getpermission();10

11 }12

13 private voidgetpermission() {14 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_SMS)15 != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECEIVE_SMS)16 !=PackageManager.PERMISSION_GRANTED) {17 ActivityCompat.requestPermissions(MainActivity.this, newString[]{18 Manifest.permission.READ_SMS, Manifest.permission.RECEIVE_SMS19 }, 1);20 }21 }22

23 }

【效果】

09ff2d642eb83b377b382b66bf630797.png

c68a7a6657ef44cd50047eda9c206a42.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值