Android 开发之常驻广播和非常驻广播的区别
白羽 2018-06-27 来源 :网络 阅读 1510 评论 0

摘要:本文将带你了解Android 开发之常驻广播和非常驻广播的区别,希望本文对大家学Android有所帮助。


一、知识准备

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

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


二、项目案例一

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

【步骤】

  ①创建一个广播NReceiver

  ②在Activity中进行注册

  ③在Activity销毁时注销

【项目结构】

    Android 开发之常驻广播和非常驻广播的区别

【NReceiver】

   Android 开发之常驻广播和非常驻广播的区别

【MainActivity】

 

 1 import android.Manifest; 2 import android.content.BroadcastReceiver; 3 import android.content.IntentFilter; 4 import android.content.pm.PackageManager; 5 import android.support.v4.app.ActivityCompat; 6 import android.support.v4.content.ContextCompat; 7 import android.support.v7.app.AppCompatActivity; 8 import android.os.Bundle; 9 import android.util.Log;10 11 import com.example.administrator.myapplication.receiver.NReceiver;12 13 public class MainActivity extends AppCompatActivity {14 15     BroadcastReceiver receiver = null;16 17     @Override18     protected void onCreate(Bundle savedInstanceState) {19         super.onCreate(savedInstanceState);20         setContentView(R.layout.activity_main);21         getpermission();22 23         registerBroadcast();24         25     }26 27     private void getpermission() {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,new String[]{32                     Manifest.permission.READ_SMS,Manifest.permission.RECEIVE_SMS33             },1);34         }35     }36 37     private void registerBroadcast() {38         receiver = new NReceiver();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 void onDestroy() {46         super.onDestroy();47         unregisterReceiver(receiver);48     }49 }

 

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

【AndroidManifest】

1     <uses-permission android:name="android.permission.READ_SMS"></uses-permission>2     <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

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

【效果】

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

    Android 开发之常驻广播和非常驻广播的区别

  Android 开发之常驻广播和非常驻广播的区别  

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

   Android 开发之常驻广播和非常驻广播的区别 

 

 二、项目案例二

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

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

【AndroidManifest】注册

 

1 <receiver2             android:name=".receiver.NReceiver"3             android:enabled="true"4             android:exported="true">5             <intent-filter >6                 <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>7             </intent-filter>8         </receiver>

 

【MainActivity】

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

 

 1 public class MainActivity extends AppCompatActivity { 2  3     BroadcastReceiver receiver = null; 4  5     @Override 6     protected void onCreate(Bundle savedInstanceState) { 7         super.onCreate(savedInstanceState); 8         setContentView(R.layout.activity_main); 9         getpermission();10 11     }12 13     private void getpermission() {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, new String[]{18                     Manifest.permission.READ_SMS, Manifest.permission.RECEIVE_SMS19             }, 1);20         }21     }22 23 }

 

【效果】

 Android 开发之常驻广播和非常驻广播的区别

 


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

 

 


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程