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()
.
注册的接收者列出
我正在尝试接收各种意图来审核 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()
.