Boot BroadcastReceiver未被调用

时间:2014-10-15 19:34:47

标签: android broadcastreceiver boot

我正在尝试在启动时启动AlarmManager,它在设置的时间间隔内调用执行后台更新任务的服务(从我的服务器获取的数据)。我在stackoverflow上阅读和搜索,我仍然感到困惑,为什么它永远不会被调用。我甚至添加了

<action android:name="android.intent.action.QUICKBOOT_POWERON" />

因为我正在真正的HTC Android设备上测试我的应用程序。

这是我的BroadcastReceiver类

public class BootBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context pContext, Intent intent) {
        startAlarmManager(pContext);
        Log.d("Called", "yes");
    }

    void startAlarmManager(Context pContext) {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(pContext);
        String a = readSettings(pContext);
        Integer interval = Integer.parseInt(a);
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MILLISECOND, interval);

        Intent intent = new Intent(pContext, StudentServisUpdate.class);

        PendingIntent pintent = PendingIntent.getService(pContext, 0, intent, 0);

        AlarmManager alarm = (AlarmManager) pContext.getSystemService(Context.ALARM_SERVICE);
        //for 30 mint 60*60*1000
        alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), interval, pintent);
    }

    String readSettings(Context cx) {
        try {
            FileInputStream fis = cx.openFileInput("settings");
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader bufferedReader = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                sb.append(line);
            }
            return sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

这是我的AndroidManifest文件

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

<application>
    ...

            </application>

            <!--<receiver  android:process=":remote" android:name="AlarmReceiver"></receiver>-->

            <receiver
                android:name=".BootBroadcastReceiver" >
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <action android:name="android.intent.action.QUICKBOOT_POWERON" />
                </intent-filter>
            </receiver>

        </manifest>

任何人都可以指出我正确的方向吗?我正在运行Android 4.4,我知道3.1后更改。

1 个答案:

答案 0 :(得分:0)

事实证明我犯了一个愚蠢的错误。我在应用程序标签下添加了我的接收器,而不是在其中。此外,启动后服务tp启动需要更长的时间,具体取决于手机的性能。