GVKun编程网logo

在AndroidManifest中注册的BroadcastReceiver可以在应用程序进程被终止时接收意图吗?

16

想了解在AndroidManifest中注册的BroadcastReceiver可以在应用程序进程被终止时接收意图吗?的新动态吗?本文将为您提供详细的信息,此外,我们还将为您介绍关于Android-从

想了解在AndroidManifest中注册的BroadcastReceiver可以在应用程序进程被终止时接收意图吗?的新动态吗?本文将为您提供详细的信息,此外,我们还将为您介绍关于Android - 从 BroadcastReceiver 启动关闭的应用程序、Android Broadcast 和 BroadcastReceiver的权限限制方式、Android BroadcastReceiver、Android BroadcastReceiver 接收收到短信的广播的新知识。

本文目录一览:

在AndroidManifest中注册的BroadcastReceiver可以在应用程序进程被终止时接收意图吗?

在AndroidManifest中注册的BroadcastReceiver可以在应用程序进程被终止时接收意图吗?

我有一个在AndroidManifest中注册的接收器,但似乎它在应用程序被杀时无法接收意图,假设我在Android进程生命周期中有一些误解?

谢谢你的帮助.

解决方法:

如果用户进入“设置”并强制停止您的应用程序,则在Android 3.1及更高版本上,您的broadcastReceivers将不再起作用.当您的应用程序首次安装时,您将返回到您所处的状态 – 必须手动运行组件(例如,用户从主屏幕启动活动)才能再次使用broadcastReceivers.

Android - 从 BroadcastReceiver 启动关闭的应用程序

Android - 从 BroadcastReceiver 启动关闭的应用程序

不要认为这是可能的。也许在旧的android版本中,安全性没有得到太多关注。但是对于新的 android 版本,尤其是。在 Marshmallow 之后,后台服务的工作受到限制。

Android Broadcast 和 BroadcastReceiver的权限限制方式

Android Broadcast 和 BroadcastReceiver的权限限制方式

在Android应用开发中,有时会遇到以下两种情况,

1. 一些敏感的广播并不想让第三方的应用收到 ;

2. 要限制自己的Receiver接收某广播来源,避免被恶意的同样的ACTION的广播所干扰。

在这些场景下就需要用到广播的权限限制。

第一种场景: 谁有权收我的广播?

在这种情况下,可以在自己应用发广播时添加参数声明Receiver所需的权限。

首先,在Androidmanifest.xml中定义新的权限RECV_XXX,例如:

<permission android:name = "com.android.permission.RECV_XXX"/>

然后,在Sender app发送广播时将此权限作为参数传入,如下:

sendBroadcast("com.android.XXX_ACTION", "com.android.permission.RECV_XXX");

这样做之后就使得只有具有RECV_XXX权限的Receiver才能接收此广播要接收该广播,在Receiver应用的AndroidManifest.xml中要添加对应的RECV_XXX权限。

例如:

<uses-permission android:name="com.android.permission.RECV_XXX"></uses-permission>

第二种场景: 谁有权给我发广播?

在这种情况下,需要在Receiver app的<receiver> tag中声明一下Sender app应该具有的权限。

首先同上,在AndroidManifest.xml中定义新的权限SEND_XXX,例如:

<permission android:name="com.android.SEND_XXX"/>

然后,在Receiver app的Androidmanifest.xml中的<receiver>tag里添加权限SEND_XXX的声明,如下:

<receiver android:name=".XXXReceiver" 
     android:permission="com.android.permission.SEND_XXX"> 
 <intent-filter>
  <action android:name="com.android.XXX_ACTION" /> 
 </intent-filter>
</receiver>

这样一来,该Receiver便只能接收来自具有该SEND_XXX权限的应用发出的广播。

要发送这种广播,需要在Sender app的AndroidManifest.xml中也声明使用该权限即可,如下:

<uses-permission android:name="com.android.permission.SEND_XXX"></uses-permission>

如此,可以用来对广播的来源与去处进行简单的控制。

同样,对Activity 和 ContentProvider的访问权限控制也类似。

补充知识:Android发送权限受限的广播,指定接受方!

本文实践代码是在Android7.1上的系统级源码上验证通过的。

1.首先是发送方:

在frameworks\base\core\res\AndroidManifest.xml中定义权限

<protected-broadcast android:name="intent.action.LOW_MEMORY" />

<uses-permission android:name="com.softmanager.permission.send.SOFTMANAGER"/>
 
  <permission android:name="com.softmanager.permission.send.SOFTMANAGER"
 android:protectionLevel="signature|privileged"/>

在代码需求的地方发出广播

Intent systemMgrIntent = new Intent();
systemMgrIntent.setAction("intent.action.LOW_MEMORY");
systemMgrIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
context.sendOrderedBroadcast(systemMgrIntent, "com.softmanager.permission.receiver.SOFTMANAGER");

2.然后是接受方:

在项目的

AndroidManifest.xml中声明权限

<uses-permission android:name="com.softmanager.permission.receiver.SOFTMANAGER" />
<permission
  android:name="com.gionee.softmanager.permission.receiver.SOFTMANAGER"
  android:protectionLevel="normal" />
 
android:permission="com.softmanager.permission.send.SOFTMANAGER"

在Receiver.java中要添加权限

<receiver android:name=".Receiver"
      android:permission="com.softmanager.permission.send.SOFTMANAGER"
      android:exported="true">
      <intent-filter>
        <action android:name="intent.action.LOW_MEMORY"/>
      </intent-filter>
    </receiver>

最后在onReceiver()中就能接受到广播了

以上这篇Android Broadcast 和 BroadcastReceiver的权限限制方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

您可能感兴趣的文章:
  • Kotlin语言使用BroadcastReceiver示例介绍
  • Android四大组件之broadcast广播详解
  • Android 广播接收器BroadcastReceiver详解
  • Android四大组件之广播BroadcastReceiver详解
  • Android Broadcast原理分析之registerReceiver详解
  • Android BroadcastReceiver广播简单使用
  • Android中BroadcastReceiver案例讲解
  • Kotlin四大组件中的broadcast广播

Android BroadcastReceiver

Android BroadcastReceiver

1、Android 监听屏幕解锁事件

http://blog.csdn.net/gf771115/article/details/7991892

2、Android利用系统广播---监听应用程序安装和卸载

http://blog.csdn.net/wangjia55/article/details/8470611

3、使用Service和BroadcastReceiver实时监听网络状态

http://gundumw100.iteye.com/blog/1732865


Android BroadcastReceiver 接收收到短信的广播

Android BroadcastReceiver 接收收到短信的广播

一、知识介绍

  1、broadcastReceiver是广播接受者,四大组件之一。

  2、Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息。

  3、使用场景:

      ①当手机没有电时,会告知用户“电量低”的广播信息。可以做到正在使用的app就会接收到这个广播消息,如果是游戏可能是提醒保存数据,如果是正在使用的工作软件,可能提醒接上电源。

      【提示】对于某某程序来说,可以选择接收这一消息也可以选择不接收这个消息。

      ②手机的storage不够了,提示你清理空间,否则应用程序将变慢或者无法使用。

      ③手机一开机,某某程序就自动运行,QQ、微信都是开机自启。

  4、一个程序发出广播信息,一个程序接收广播信息,所以至少需要2个程序才能完成一发一收。发的一方,叫广播发送方;收的一方,叫广播接收者。

  5、广播接受者需要进行注册。动态注册,静态注册(在AndroidManiFest文件中)

  

二、项目实践

【步骤】

  ①定义广播接受者

  ②进行注册,添加过滤器 intent-filter,接收特定的广播

  ③重写onReceiver方法,如果执行,代表已经接收到广播

  ④定义收到信息广播接收者,属于系统广播,则需要申请权限(静态,动态)

【项目结构】

    

【提示】创建Receiver可以通过以下方式

    此方法会自动在AndroidManifest中进行注册receiver,但是需要接收固定的广播,仍需添加intent-filter

    

    

 【AndroidManifest】  

1         <receiver
2             android:name=".receiver.MsgReceiver"
3             android:enabled="true"
4             android:exported="true">
5             intent-filter6                 action ="android.provider.Telephony.SMS_RECEIVED"></action7                 <!--接收收到信息的广播-->
8             </9         receiver>

【MsgReceiver】

  重写onReceiver方法,添加Toast

 1 import android.content.broadcastReceiver;
 2  android.content.Context;
 3  android.content.Intent;
 4  android.widget.Toast;
 5 
 6 public class MsgReceiver extends broadcastReceiver {
 7 
 8     @Override
 9     void onReceive(Context context,Intent intent) {
10         // Todo: This method is called when the broadcastReceiver is receiving
11          an Intent broadcast.
12         Toast.makeText(context,"收到信息",Toast.LENGTH_SHORT).show();
13         添加Toast便于观察
14     }
15 }

 

【添加权限】

  ①静态权限:【AndroidManifest】   

1    uses-permission ="android.permission.READ_SMS"uses-permission2     ="android.permission.RECEIVE_SMS">

  ②动态权限【MainActivity】

 android.Manifest;
 android.content.pm.PackageManager;
 android.support.v4.app.ActivityCompat;
 android.support.v7.app.AppCompatActivity;
 android.os.Bundle;

class MainActivity  AppCompatActivity {

    @Override
    protected  onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (ActivityCompat.checkSelfPermission(MainActivity.this
                ActivityCompat.checkSelfPermission(MainActivity.PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(MainActivity.new String[]{Manifest.permission.READ_SMS,Manifest.permission.RECEIVE_SMS},1);
        }动态申请权限
    }
}

 

【测试】

  ①操作

    

 

  ②效果

     

 

 【小结】

   ①这里是接收系统广播,也可以自己定义广播。以及可以添加很多功能,接收到广播进行特定的操作。

   ②广播必须添加过滤器,对特定的广播进行接收

   ③如果是接收系统广播要进行权限的申请,5.0之后一定要进行动态权限申请才可以

 

 

    

 

总结

以上是小编为你收集整理的Android BroadcastReceiver 接收收到短信的广播全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

关于在AndroidManifest中注册的BroadcastReceiver可以在应用程序进程被终止时接收意图吗?的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Android - 从 BroadcastReceiver 启动关闭的应用程序、Android Broadcast 和 BroadcastReceiver的权限限制方式、Android BroadcastReceiver、Android BroadcastReceiver 接收收到短信的广播的相关知识,请在本站寻找。

本文标签: