关于监听系统开机广播的权限问题

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcastofboot">
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name=".BootCompleteReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>

然而,开机并不能接受到广播。

后来在网上查看问题所在,找到答案。

如果是三方应用没有系统权限的话,无解。
原因如下:
谷歌为了安全考虑(避免流氓软件、病毒啊干坏事,还能提高效率),4.0以后加了2个Flag:FLAG_INCLUDE_STOPPED_PACKAGES和FLAG_EXCLUDE_STOPPED_PACKAGES。系统发出的广播带有FLAG_EXCLUDE_STOPPED_PACKAGES这个flag,在应用进程没有启动的情况下是不能接收到的。
当然如果是用户自定义的广播可以带有FLAG_INCLUDE_STOPPED_PACKAGES这个flag,那么即使应用没启动也可以收到广播(很遗憾啊!只能是三方自定义的广播)。

链接:http://bbs.csdn.net/topics/390630274/

时间: 2024-08-27 22:50:38

关于监听系统开机广播的权限问题的相关文章

Android 监听系统短信广播

使用场景: 1.对系统接收到的短信进行识别,是广告或者是诈骗等 2.对短信内容进行过滤或者是对内容进行提取,比如验证码提取 3.对系统短信进行拦截,连系统自己都不让收到了(不会出现在系统数据里面,也不会有系统短信的通知栏提示) 备注: 1.系统短信广播为有序广播,要拦截的话,需要在注册广播的时候设置广播优先级为最大,不过这种也有风险,如果被其他的应用先拦截了,那么我们将不再收到,使用时需注意. 2.要接到系统短信广播,那么应用必须具备短信读取权限,这对使用者来说可能是一个限制 3.除了短信读取权

广播小案例-监听系统网络状态 --Android开发

本例通过广播实现简单的监听系统网络状态改变的小案例. 1.案例效果演示 当手机连网后,系统提示“已连接网络”, 当手机断网后,系统提示“当前网络不可用1”. 2.案例实现 在主活动中动态注册广播,然后写一个内部类来接收系统广播,下面是相关文件的核心代码: MainActivity.java: public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private Networ

Android之——监听手机开机事件

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47028535 本文中,主要通过监听开机广播来达到监听手机开机状态的操作,在Android中可以通过广播机制来监听一些系统服务和系统级的操作,好了,不多说,直接上代码吧 1.创建广播接收者类BootCompleteReceiver 这个类中的回调方法是手机开机后自动调用,我在这里只是打印出相关日志,具体的业务逻辑大家可以自己根据自己的具体需求去实现. 代码如下: package c

Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.net.ConnectivityManager;  import android.ne

android应用程序监听SMS Intent广播

当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent. 对于应用程序监听SMS Intent广播,首先需要添加RECEIVE_SMS权限.通过在应用程序manifest中添加一个uses-permission,如下面的片段所示: <uses-permission android:name="android.permission.RECEIVE_SMS"/> AndroidMani

通过ContentResolver监听系统短信变化

需要有读取短信的权限 <uses-permission android:name="android.permission.READ_SMS"/> ContentResolver注册一个内容观察者 ContentObserver内容观察者监听系统短信的变化 通过ContentResolver来获取短信内容提供者提供的短信信息 package com.heima.jiantingSms; import android.app.Activity; import android.c

监听APP升级广播处理

当旧版本的用户升级新版本的时候需要重新设定一些值处理,这时候需要监听升级版本的广播 <receiver android:name=".OnUpgradeReceiver"> <intent-filter> <action android:name="android.intent.action.PACKAGE_REPLACED" /> <data android:scheme="package" />

Android Notification之监听系统清除通知栏方法

编写了一个Notification通知工具类,里面含有监听系统清除通知栏方法,焦点在加粗斜体部分: public class Notifier { private static final String TAG = Notifier.class.getSimpleName(); private static Notifier instance; private Context mContext; private static final int NOTIFICATION_ID_1 = 0; pr

iOS 设置系统音量和监听系统音量变化

很简单的调用 首先在工程引入MediaPlayer.framework #import <MediaPlayer/MediaPlayer.h> 1. 获取系统音量 // 获取系统音量 MPVolumeView *volumeView = [[MPVolumeView alloc] init]; UISlider *volumeViewSlider= nil; for (UIView *view in [volumeView subviews]){ if ([view.class.descrip