Android:广播接收器尽管被声明但仍不工作

Android: Broadcast Receiver not working despite being declared

我正在尝试接收各种意图来审核 activity 在我的 phone 上的使用情况。我正在使用 AndroidStudio,这是我的 AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tomm.vpandroid2" >

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_MMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.CAMERA" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".SettingsActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver
            android:name=".GlobalEventsReceiver"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.BROADCAST" />
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
                <data android:mimeType="application/vnd.wap.mms-message" />
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
                <action android:name="android.intent.action.PHONE_STATE" />
                <action android:name="android.intent.action.SCREEN_ON" />
                <action android:name="android.hardware.action.NEW_PICTURE" />
                <action android:name="android.hardware.action.NEW_VIDEO" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

这是 GlobalReceiver:

package com.tomm.vpandroid2;
public class GlobalEventsReceiver extends BroadcastReceiver {
    private final String TAG = "viprol.receiver";

    public GlobalEventsReceiver() {
        Log.i(TAG, "global receiver constructed");
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "received action");
    }
}

问题是 ctor 和 onReceive() 方法永远不会被调用(即使我在它们上设置断点并调试)。

我正在使用 OnePlusOne 并为此应用程序禁用了 PrivateGuard。不确定还可以尝试什么?

首先,您将只匹配 MIME 类型为 application/vnd.wap.mms-message 的广播。据推测,你想把它连同它的相关动作一起拉出来,在一个单独的 <intent-filter> 中用于相同的 <receiver>,尽管我最近几年没怎么玩过 WAP。

其次,我不知道有一个名为 BROADCAST 的广播,就像您的第一个 <action>.

第三,IIRC,您不能从清单注册的接收者列出 SCREEN_ON,而只能从通过 registerReceiver().

注册的接收者列出