资讯专栏INFORMATION COLUMN

Android 常驻广播和非常驻广播

TalkingData / 1836人阅读

摘要:非常驻广播接受者使用,对广播接收者进行注册。建议了解二项目案例一标题利用非常驻广播接受收到短信的广播步骤创建一个广播在中进行注册在销毁时注销项目结构提示由于是要接收短信的广播,所以需要获取权限提示非常驻型广播无需在中进行注册广播。

一、知识准备

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

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

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

二、项目案例一 【标题】利用非常驻广播接受收到短信的广播 【步骤】

  ①创建一个广播NReceiver

  ②在Activity中进行注册

  ③在Activity销毁时注销

【项目结构】

    

【NReceiver】

   

【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     @Override
18     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_SMS
33             },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     @Override
45     protected void onDestroy() {
46         super.onDestroy();
47         unregisterReceiver(receiver);
48     }
49 }

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

【AndroidManifest】
1     
2     

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

【效果】

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

    

    

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

    

 

 二、项目案例二 【标题】常驻型广播接收收到短信的广播

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

【AndroidManifest】注册
1 
5             
6                 
7             
8         
【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_SMS
19             }, 1);
20         }
21     }
22 
23 }
【效果】

 

 

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/3052.html

相关文章

  • Broadcast发送广播

    摘要:一知识介绍广播分类有序广播接收者收到广播传递给传给,有序传递。任何一个环节都可以终止广播,也可以修改广播中携带的数据。发送方式广播接收者按是否常驻分类常驻型广播接收者在中注册,只要应用程序没有被卸载就持续存在。一、知识介绍   1、【广播分类】     ①有序广播:接收者A收到广播传递给B,B传给C,有序传递。任何一个环节都可以终止广播,也可以修改广播中携带的数据。       发送的方式:...

    孙吉亮 评论0 收藏0
  • Android&Java面试题大全—金九银十面试必备

    摘要:需要校验字节信息是否符合规范,避免恶意信息和不规范数据危害运行安全。具有相同哈希值的键值对会组成链表。通过在协议下添加了一层协议对数据进行加密从而保证了安全。常见的非对称加密包括等。 类加载过程 Java 中类加载分为 3 个步骤:加载、链接、初始化。 加载。 加载是将字节码数据从不同的数据源读取到JVM内存,并映射为 JVM 认可的数据结构,也就是 Class 对象的过程。数据源可...

    Labradors 评论0 收藏0
  • Android&Java面试题大全—金九银十面试必备

    摘要:需要校验字节信息是否符合规范,避免恶意信息和不规范数据危害运行安全。具有相同哈希值的键值对会组成链表。通过在协议下添加了一层协议对数据进行加密从而保证了安全。常见的非对称加密包括等。 类加载过程 Java 中类加载分为 3 个步骤:加载、链接、初始化。 加载。 加载是将字节码数据从不同的数据源读取到JVM内存,并映射为 JVM 认可的数据结构,也就是 Class 对象的过程。数据源可...

    renweihub 评论0 收藏0
  • 【腾讯Bugly干货分享】Android 进程保活招式大全

    摘要:方案适用范围适用于目前已知所有版本。系统广播事件不可控,只能保证发生事件时拉活进程,但无法保证进程挂掉后立即拉活。在进程中利用保证进程的唯一性,不至于出现创建多个进程以及进程变成僵尸进程等问题。 本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ac4... 作者:腾讯——张兴华 目前市面上的应用,貌似除了微信...

    leoperfect 评论0 收藏0
  • Android面试整理(附答案)

    摘要:和体现了对不同异常情况的分类。是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应的处理。是指在正常情况下,不大可能出现的情况,绝大部分都会使程序处于非正常不可恢复的状态。常见的非对称加密包括等。 面试,无非都是问上面这些问题(挺多的 - -!),聘请中高级的安卓开发会往深的去问,并且会问一延伸二。以下我先提出几点重点,是面试官基本必问的问题,请一定要去了解! 基础知识...

    Cruise_Chan 评论0 收藏0

发表评论

0条评论

TalkingData

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<