OnBootReceiver работает, но не находит AlarmReceiver - PullRequest
0 голосов
/ 03 февраля 2012

Я пытаюсь настроить приемник будильника сразу после загрузки. Поэтому у меня есть OnBootReceiver, который должен зарегистрировать сигнал тревоги. OnBootReceiver работает, и его вызывают, но каким-то образом он не может найти мой класс AlarmReceiver.

OnBootReceiver, который успешно запускается после загрузки:

public class OnBootReceiver extends BroadcastReceiver {

    private static final String TAG = "OnBootReceiver";

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

        Intent i = new Intent(context, com.packagenames.AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getService(context, 0, i, 0);
        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        Calendar time = Calendar.getInstance();
        time.setTimeInMillis(System.currentTimeMillis());
        time.add(Calendar.SECOND, 30);

        am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), time.getTimeInMillis(), pi);

    }

}

Как вы можете видеть, он настраивает сигнал тревоги при попытке вызвать com.packagenames.AlarmReceiver.class. Этот класс существует и находится в том же пакете:

public class AlarmReceiver extends BroadcastReceiver {

    private static final String TAG = "AlarmReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "alarm received");
        Intent i = new Intent(context, com.packagename.DataService.class);
        i.putExtra("action", "process");
        context.startService(i);
    }

}

К сожалению, я получаю следующую ошибку:

02-03 09: 22: 25.344: W / ActivityManager (103): невозможно запустить службу Намерение {flg = 0x4 cmp = com.phonegap.packagename / .AlarmReceiver (имеет дополнения) }: не найдено

Манифест Android выглядит следующим образом

<application>

// activities etc

        <receiver
            android:name="com.phonegap.packagename.OnBootReceiver"
            android:enabled="true"
            android:exported="false"
            android:label="OnBootReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <receiver
            android:name="com.phonegap.packagename.AlarmReceiver"
            android:enabled="true"
            android:label="AlarmReceiver">
            <intent-filter>
            </intent-filter>
        </receiver>

    </application>

Вы видите ошибку? Может я что то забыл?

Спасибо

edit: в манифесте я добавил

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

, чтобы заставить работать OnBootReceiver. Нужно ли что-то подобное для будильника?

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Не следует ли использовать getBroadcast вместо getService при создании ожидающего намерения?

0 голосов
/ 09 июня 2012

Весь приемник работает ТОЛЬКО если ваше приложение НЕ установлено на SD-карту. Добавьте это в свой файл манифеста, чтобы сделать это:

андроида: INSTALLLOCATION = "internalOnly"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...