2013-12-12 4 views
0

Мой трансляционный транслятор не работает, я не получаю сообщение в журнале, вы можете мне помочь? Это мой BroadcastReceiver:Начальный сервис при загрузке завершен не работает

public class BootReceiver extends BroadcastReceiver{ 
    public static SharedPreferences prefs; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     prefs = PreferenceManager.getDefaultSharedPreferences(context); 
     // TODO Auto-generated method stub 
     Log.w("A intrat in BootReceiver"," "); 
     if (!(prefs.getString(NotificareOptions.OptionsPos, "2")).equals("1")) 
     context.startService(new Intent(context, ServiceNotif.class)); 

    } 

} 

я получил разрешение, и у меня есть приемник, объявленный в манифесте.

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

<receiver android:name=".BootReceiver" 
      android:enabled="true" 
      android:exported="true" > 
      <intent-filter android:priority="500" > 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 

В чем проблема? Я также слышал, что RECEIVE_BOOT_COMPLETED не работает на всех телефонах Android.

+0

Ваше приложение на SD-карте? –

+0

Я пробовал это на эмуляторе, и его не работало, поэтому я этого не сделал уже. –

+0

Попробуйте на своем телефоне и сообщите нам, если это сработает. – JanBo

ответ

0

Несколько вещей, которые я замечаю. В вашем BootReceiver вы указываете:

<receiver android:name=".BootReceiver"

Это означает, что приемник находится в пакете по умолчанию (например, в манифесте значении package). Если это не так, или если вы не знаете, вы можете указать полный пакет, как это:

<receiver android:name="com.mycompany.boot.BootReceiver"

Кроме того, вполне возможно, что ваше лог работает, но вы не можете ее видеть. Вы войти как:

Log.w("A intrat in BootReceiver"," ");

Так тег является «intrat в BootReceiver» и сообщение пуст. Попробуйте ввести значение сообщения, которое не является пустым.

Кроме того, вы можете видеть, что если был запущен Intent или нет, если у вас есть adb logcat, работающий при перезагрузке устройства.

+0

Я сделал то, что вы сказали мне, а также протестировали на моем телефоне, и его не работает –

0

Я не вижу ничего прямого. Но несколько вещей, чтобы попробовать:

  1. Try именовании приемник с полным package.name.path.BootReceiver
  2. Remove включена, экспортируемые и приоритет декларации приемника
+1

Я сделал это, но его не работает –

+0

Является ли ваш класс BootReceiver в дополнительном пакете? Если нет, попробуйте переместить его в корневой каталог. Кроме того, на каком телефоне вы тестируете это? – Mike

+0

У меня есть это в корне, я тестирую галактику s2 + –

2

Ваш код выглядит верный. Это может быть проблемой с эмулятором. У меня тоже были проблемы с трансляцией BOOT_COMPLETE на эмуляторе. Он не всегда срабатывал при повторном запуске эмулятора. Следующая команда АБР сделал трюк, однако:

adb.exe -s emulator-5554 shell 
# am broadcast -a android.intent.action.BOOT_COMPLETED 

Это заставит эмулятор транслировать сообщение BOOT_COMPLETED, так же, как реальное устройство делает при запуске. Это также имеет то преимущество, что он намного быстрее, чем перезапуск эмулятора.

+0

Я также тестировал его на своем телефоне и не работал. –

+0

Что происходит, когда вы выдаете команду эмулятора выше? Вызывается ли ваш код BroadcastReceiver? – EJK

+0

Да, мой код вещания вызывается, но при перезапуске телефона это не –

1

После того, как я заменил android:exported="true"android:exported="false" в своем манифесте, он начал работать. Во многих учебниках он не говорит об этом, но, возможно, это тоже поможет кому-то другому.

+0

Это работает! Спасибо за ваш совет. –

0

Основываясь на вашем указании на то, что изменение значения android:exported решило вашу проблему, я думаю, что что-то еще могло быть в игре - восстановление кода с нуля.

Проведение «Чистоты» в Eclipse (или эквивалентная команда в среде разработки) может решить эту проблему для других в будущем.

Смежные вопросы