2015-05-07 2 views
5

Я сервис, который я хотел бы начать на ботинке ПОЛНОЙслужба не запущена на BOOT ПОЛНОЙ

, когда он начал, у меня есть сообщение тостов отображается.

Проблема заключается в том, что при загрузке устройства тост отображается и застревает на экране, и служба запускается неправильно.

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

мой манифест:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.tfl.extprotocolservice" 
    android:versionCode="7" 
    android:versionName="1.6" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="21" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <receiver android:name="com.tfl.extprotocolservice.ExtProtocolBroadcastReceiver" 
      android:enabled="true" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 

     <service android:name=".ExtProtocolService" > 
      <intent-filter> 
       <action android:name="com.tfl.extprotocolservice.ISetIpPort" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="com.tfl.extprotocolservice.IExtMessage" /> 
      </intent-filter> 
     </service> 
<!-- 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="landscape" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 

мой радиовещательный приемник:

public class ExtProtocolBroadcastReceiver extends BroadcastReceiver { 


    /* broadcast receiver to start on BOOT COMPLETE*/ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent StartServiceIntent=new Intent(context,ExtProtocolService.class); 
     context.startService(StartServiceIntent); 

    } 

} 

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

+0

Что произойдет, если вы впервые запустите свое приложение, запустив его из пусковой установки, а затем перезагрузитесь? перезагрузка запускает ваш сервис? – HappyCactus

+0

@HappyCactus к сожалению нет. все тот же – yanish

ответ

3

Если приложение не имеет действия, ваш BroadcastReceiver никогда не дозвонились.

При установке приложения оно устанавливается в состоянии «остановлено». приложения в «остановленном состоянии» не получают широковещательную передачу Intent с.

Чтобы получить приложение из состояния «остановлено», пользователь должен вручную запустить приложение (по крайней мере, один раз). Чтобы сделать это, вы должны предложить ему Activity, который он может использовать для запуска вашего приложения.

После того, как ваше приложение больше не находится в состоянии «остановлено», Android будет передавать широковещательные сообщения Intent s. То есть, пока пользователь не «остановит» ваше приложение.

Если пользователь «принудительно останавливает» ваше приложение, он вернется к «остановленному состоянию» и больше не получит трансляцию Intent s. Пока пользователь не запустит ваше приложение снова.

+0

Здесь вы идете! Это поведение было добавлено/изменено в Android 3.1: http://developer.android.ком/о/версия/андроид-3.1.html # launchcontrols –

0

Я попробовал с am broadcast -a android.intent.action.BOOT_COMPLETED, затем перезапустил устройство.

Вы можете попробовать <action android:name="android.intent.action.USER_PRESENT"/>

После дополнительных исследований, я думаю, что это был fastboot mode, который не будет транслировать BOOT_COMPLETE.

+0

что вы подразумеваете под режимом fastboot? – yanish

+0

Fastboot не имеет ничего общего с этой проблемой, fasboot даже не запускает ОС Android. Вероятно, вы сбиваете с толку «быструю загрузку». –

+1

Некоторые устройства HTC могут включить функцию «быстрой загрузки», которая больше похожа на глубокую спячку, а не на реальную перезагрузку и, следовательно, не должна давать намерения BOOT_COMPLETE. Чтобы восстановить это, просто добавьте это действие в фильтр-фильтр получателей "" –

-1

Ваша услуга является фильтрацией действий, но ваши намерения не предоставляют. Фикс с этим:

StartServiceIntent.setAction("com.tfl.extprotocolservice.IExtMessage"); 
Смежные вопросы