2013-08-18 2 views
1

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

  • manifest.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.aa.gpsdemo" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    
    <uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="16" /> 
    
    <uses-permission android:name="android.permission.INTERNET"/> 
    
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> 
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    
    
    <application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
        android:name="com.aa.gpsdemo.MainActivity" 
        android:label="@string/app_name" > 
        <intent-filter> 
         <action android:name="android.intent.action.MAIN" /> 
    
         <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
    </activity> 
    <service android:name=".MyService" android:label="My Service"> 
        <intent-filter> 
        <action android:name="com.aa.gpsdemo.StartMyServiceAtBootReciever" /> 
        </intent-filter> 
    </service> 
    <receiver 
        android:name=".receiver.StartMyServiceAtBootReceiver" 
        android:enabled="true" 
        android:exported="true" 
        android:label="StartMyServiceAtBootReceiver"> 
        <intent-filter> 
         <action android:name="android.intent.action.BOOT_COMPLETED" /> 
        </intent-filter> 
    </receiver> 
        </application> 
    
        </manifest> 
    
  • StartMyServiceAtBootReciever.java

    package com.aa.gpsdemo; 
    import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 
    
    public class StartMyServiceAtBootReciever extends BroadcastReceiver { 
    
    @Override 
    public void onReceive(Context context, Intent intent) { 
        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 
        Intent serviceIntent = new Intent("com.aa.gpsdemo.BackgroundService"); 
        context.startService(serviceIntent); 
         } 
        } 
    } 
    
  • BackgroundService.java

    package com.aa.gpsdemo; 
    
    import android.app.Service; 
    import android.content.Intent; 
    import android.content.Context; 
    import android.os.IBinder; 
    import android.location.LocationManager; 
    import android.os.Bundle; 
    import android.os.StrictMode; 
    import android.util.Log; 
    import android.widget.Toast; 
    import android.location.Criteria; 
    
    public class BackgroundService extends Service { 
    
    private static NewLocationListener mylistner=null; 
    private final static String TAG = "MainActivity"; 
    private Context context = null; 
    
    @Override 
    public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
    } 
    
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
    
    if (android.os.Build.VERSION.SDK_INT > 9) { 
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
        StrictMode.setThreadPolicy(policy); 
    } 
    
    mylistner = new NewLocationListener(context); 
    Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    criteria.setPowerRequirement(Criteria.POWER_MEDIUM); 
    criteria.setCostAllowed(true); 
    LocationManager locManager = (LocationManager)  context.getSystemService(Context.LOCATION_SERVICE); 
    String bestProvider=locManager.getBestProvider(criteria, true); 
    locManager.requestLocationUpdates(bestProvider,1000, 5, mylistner); 
    
    
    
    } 
    
        } 
    

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

ответ

3

Уверьте, что у вас есть разрешение в AndroidManifest Файл:

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

Изменить это:

@Override 
public void onReceive(Context context, Intent intent) { 
    Intent serviceIntent = new Intent(context,BackgroundService.class); 
    startService(serviceIntent); 
    } 
+0

Спасибо за ваше время, но это не работает до сих пор его не давая тост или журнал в приемнике и дает, к сожалению, приложение остановилось –

+0

я просто попытался ALOK его работает отлично для меня можно отправить сообщение LogCat ?? Make Sure, и сервис правильно указан в ManifestFile –

+0

это мой раздел манифеста, где im привязка службы и приемника \t \t <намерения фильтр> \t \t <действие андроид: имя = "com.aa.gpsdemo.StartMyServiceAtBootReceiver" /> \t \t \t \t \t \t <приемник \t \t Android: Имя = "com.aa.gpsdemo.StartMyServiceAtBootReceiver" \t \t андроида: включено = "истинный" \t \t андроид: экспортироваться = "истинный" \t \t андроида: метка = "Star tMyServiceAtBootReceiver "> \t \t <замысел-фильтр> \t \t –

0

RECEIVE_BOOT_COMPLETED: Broadcast Действие: Это транслируется один раз, после того, как с ystem завершил загрузку. Его можно использовать для выполнения инициализации, специфичной для приложения, например, для установки аварийных сигналов. Вы должны иметь разрешение RECEIVE_BOOT_COMPLETED для получения этой трансляции.

Refrence

Stackoverflow Question

+0

Спасибо за ваше время, и я обновил файл манифеста i дали вам разрешение на то, что вы имеете в виду –

+1

, но он не работает –

+0

@AlokAgarwal попытаться запустить службу с onReceive – Basbous