Android AlarmManager 在开机时的应用

3
我正在使用AlarmManager启动一个每分钟运行一次的服务。然而,当我打开设备时,会弹出"应用程序blabla意外停止"的警告对话框,带有强制关闭按钮。由于唯一的调试选项是WIFI和连接的IP地址在每次重新启动设备时都会更改,因此我不知道错误是什么。
服务在没有引导的情况下可以正常运行。
这是我的BroadcastReceiver,在应用程序下运行:
    public class FPBootReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        android.os.Debug.waitForDebugger();

        Intent bootintent = new Intent(context, FPService.class);
        PendingIntent pi = PendingIntent.getService(context, 0, bootintent, PendingIntent.FLAG_UPDATE_CURRENT);

        long nextUpdateTimeMillis = DateUtils.MINUTE_IN_MILLIS;
        Time nextUpdateTime = new Time();
        nextUpdateTime.set(nextUpdateTimeMillis);

        AlarmManager FPAlarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        FPAlarm.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), nextUpdateTimeMillis, pi);
    }
}

清单:

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

<application
    android:icon="@drawable/pc"
    android:label="@string/app_name" >
    <service android:name=".FPService" />

    <receiver android:enabled="true" android:name="mypackage.FPBootReceiver"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

    <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

    </receiver>


    <activity
        android:name=".CF_Aachen"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

你看到我做错的地方了吗?

更新:成功调试启动,但是我遇到了AndroidRuntime(2781)错误:java.lang.RuntimeException: 无法实例化接收器 mypackage.FPBootReceiver: java.lang.ClassNotFoundException: mypackage.FPBootReceiver in loader dalvik.system.PathClassLoader


你有检查Logcat输出吗? - Benito Bertoli
请阅读上文。我无法这样做,因为这是一种WIFI调试方式,每次启动时IP地址都会更改。有没有办法在不关闭设备的情况下发送此BOOT意图? - Erol
如果你可以调试应用程序,那么怎么可能不获取logcat输出呢? - Christine
正如我之前所说,我无法在启动时调试,因为每次启动IP地址都会更改,我的唯一调试选项是通过WIFI进行。现在,我找到了一个命令行以发送BOOT_COMPLETED意图,并且我可以看到Logcat。请参见上面的更新。 - Erol
在你的清单文件中,将mypackage.FPBootReceiver改为test.aachen.FPBootReceiver。 - Benito Bertoli
2个回答

2

Android系统无法看到您的接收器,请检查路径,除非您的完整包名确实为“mypackage”。您需要使其成为“.mypackage.FPBootReceiver”或指定完整路径。


谢谢,我找到了问题。与你所说的类似。 - Erol

2

我把BroadcastReceiver类写在Activity的同一个类下面,所以找不到它。

我在mypackage中创建了一个单独的类文件,并在那里创建了这个类,然后问题就解决了。

感谢所有提供建议的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接