2014-02-10 4 views
0

Я попробовал этот Trying to start a service on boot on Androidслужбы не вызывались при запуске телефона - Android

Кроме того, я проверил с http://blog.vogella.com/2011/12/11/automatically-starting-services-in-android-after-booting/ пока мое приложение обыкновения перезагрузки при запуске телефона. Вот код.

AndroidManifest.xml

  <service android:name=".MyService"> 
      </service> 
<receiver android:name=".Autostart" 
android:enabled="true" 
android:exported="false"> 
<intent-filter>  
<action android:name="android.intent.action.BOOT_COMPLETED"/> 
</intent-filter> 
    </receiver> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

MyService

public class MyService extends Service implements LocationListener { 



@Override 
public IBinder onBind(Intent intent) { 

    return mBinder; 
} 

private final IBinder mBinder = new LocalBinder(); 

public class LocalBinder extends Binder { 
    MyService getService() { 
     return MyService.this; 
    } 
} 

@Override 
public void onCreate() { 


} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i("LocalService", "Received start id " + startId + ": " + intent); 
    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 

@Override 
public void onDestroy() { 
    // Cancel the persistent notification. 
    this.stopSelf(); 
    // Tell the user we stopped. 

} 

MainActivity

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

startService(new Intent(getBaseContext(), MyService.class)); 

Собираюсь ли я неправильно где-нибудь?

Edit:

public void onReceive(Context arg0, Intent arg1) 
{ 
    Intent intent = new Intent(arg0,MyService.class); 
    arg0.startService(intent); 
    Log.i("Autostart", "started"); 

} 

Это мой BroadcastReceiver. Еще нет результатов.

+0

вы уверены, что не существует никаких ограничений фона службы в ** Настройки **? – SMR

+0

Вам нужен экспортированный приемник? – Sam

+0

Нет ограничений на фоновое обслуживание в настройках. –

ответ

0

Я следовал за статьей по адресу vogella и смог запустить мой сервис в Boot.

Прежде всего, вы должны иметь BroadcastReceiver для мероприятия android.intent.action.BOOT_COMPLETED. Просто выполните шаги из блога. Кажется, вы запустили службу в своем приложении onCreate. Это будет вызвано только в том случае, если пользователь запустит ваше приложение.

Когда система загрузится, будет вызван метод вашего приемника класса onReceive(). Здесь вы должны начать свою деятельность, как показано ниже.

public class BootReceiever extebds BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent service = new Intent(context, YourService.class); 
     context.startService(service); 
    } 
} 

Из исследований, которые я сделал, то лучше начать обслуживание после короткой задержки, как много приложений/услуги могут запускаться при загрузке, так что шансы на низкую памяти больше. Я начал свою службу после небольшой задержки.

1

попробуйте зарегистрировать BroadcastReceiver для ACTION_BOOT_COMPLETED. Вы можете получить запуск трансляции.

public class BootBroadCast extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     Intent service=new Intent(context, MyService.class); 
     context.startService(service); 
    } 
} 

второй вам нужно добавить это в AndroidManifest.xml

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

      </intent-filter> 
     </receiver> 
+0

У меня есть BroadcastReceiver еще нет результатов. –

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