Java 广播接收器未接收广播

Java 广播接收器未接收广播,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,我似乎很难让我的onReceive班级接收我发出的任何广播。我不确定是我的代码出了问题还是安卓清单出了问题 public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("BROADCAST_RECEIVED", intent.getDataString());

我似乎很难让我的onReceive班级接收我发出的任何广播。我不确定是我的代码出了问题还是安卓清单出了问题

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("BROADCAST_RECEIVED", intent.getDataString());
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP, "");
        wakeLock.acquire();
        wakeLock.release();
        context.startActivity(intent);
    }

}

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.brianlindsey.alarm"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="18"
        android:targetSdkVersion="18" />

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <receiver
            android:name="com.brianlindsey.AlarmReceiver"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" >
                </action>
            </intent-filter>
        </receiver>

    </application>

</manifest>


在apk中的活动至少启动一次之前,引导完成的接收器无法接收广播。这是谷歌为防止人们错误下载应用程序并在启动时运行而添加的一条奇怪规则。

除了Gabe的回答之外,你在
setDayOfWeekAlarm()中使用的
意图
指向
AlarmScreenActivity
。这不是你的
BroadcastReceiver
,也不是你清单中注册的任何其他组件。

与其说是“误下载应用程序”,不如说是“防止恶意软件驱动”。一旦Play Store有了一个网站,现在用户只需一套谷歌认证就可以在未经设备许可的情况下在设备上安装任何应用程序。这听起来更像是ANdroid中的一个缺陷,即没有用户的直接操作就可以安装应用程序。在我看来,修复该漏洞仍然是一种奇怪的方式,因为它仍然允许安装应用程序(最终可能会运行,因为用户有时会看到图标并问“这是什么?”)“有任何方法可以安装应用程序,而无需用户的直接操作”--不是真的。同样,问题是谷歌的认证遭到黑客攻击。从谷歌的角度来看,用户确实安装了应用程序,因为谷歌无法区分用户和使用被黑客认证的人。@Gabeschen:这不是一个“奇怪的规则”。这样想吧……即使是安卓手机也是99%的电脑。曾经,最流行的计算机病毒(至少在DOS和Windows PC上)是感染MBR(主引导记录)的病毒。在某些方面,不受限制地使用
BOOT_COMPLETED
可能会使未经授权的软件变得活跃,类似于PC上的引导扇区病毒。Android可能在许多方面存在缺陷,但对可能以自动方式运行的恶意软件的任何限制都比没有要好。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.brianlindsey.alarm"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="18"
        android:targetSdkVersion="18" />

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <receiver
            android:name="com.brianlindsey.AlarmReceiver"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" >
                </action>
            </intent-filter>
        </receiver>

    </application>

</manifest>