2013-05-03 4 views
0

Привет, я разработал приложение-приложение с использованием активности и отлично работает в версии 2.2 и 2.3 для Android, и он запускается при загрузке и запускает мое приложение за один раз за 30 минут и отправляет местоположение на сервер, но в 4.0 приложение не работает на сервисах на ботинке может кто-нибудь сказать мне, почему?Как запустить службу в 4.0?

мой код:

BroadcastReceiver.java:

public class autostart extends BroadcastReceiver { 
    public void onReceive(Context arg0, Intent arg1) { 
     if ("android.intent.action.BOOT_COMPLETED".equals(arg1.getAction())) { 
      Intent intent = new Intent(arg0, gps_back_process.class); 
      arg0.startService(intent); 
      Log.i("Autostart", "started"); 
     } 
    } 
} 

service.java:

public class gps_back_process extends Service 
{ 
    private static final String TAG = "MyService"; 
    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
     Log.d("Testing", "Service got created"); 
     Toast.makeText(this, "gps_back_process,onCreate();", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
    } 


    @Override 
    public void onStart(Intent intent, int startid) 
    { 
     Intent intents = new Intent(getBaseContext(),MainActivity.class); 
     intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intents); 
     Toast.makeText(this, "gps_back_process.onCreate();", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onStart"); 
    } 
} 

Manifest:

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

    <receiver android:name=".autostart" > 
       <intent-filter> 
        <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       </intent-filter> 
      </receiver> 
<activity android:name=".MainActivity" > 
     </activity> 

     <service 
      android:name=".gps_back_process" 
      android:enabled="true" /> 
    </application> 

спасибо.

ответ

0

Это происходит из-за того, что с Android 3.1+ вы не запускаетесь на Boot, если вы не запускаете (запускаете) приложение по крайней мере один раз после установки. Поэтому, когда вы устанавливаете приложение и перезапускаете устройство до запуска приложения MainActivity, ваш BroadCastReceiver не будет запущен. Для этого вам нужно запустить свой MainActivity один раз, а затем перезапустить устройство. Это работает!

Для справки вы можете проверить мои question здесь.

+0

Можете ли вы сказать мне, как запустить мой сервис после установки его на устройство, мое обслуживание реализует Activity? – 2013-05-03 06:57:24

+0

Если у вас есть Занятие, вы можете начать свою Службу в Деяниях 'onCreate()', но выше 3.1+ ее невозможно запустить при установке приложения. –

+0

ладно спасибо, обслуживание метода onCreate() будет работать ниже 3.1 ?? – 2013-05-03 07:01:42

0

Вы должны добавить добавить android.permission.RECEIVE_BOOT_COMPLETED,

Если у вас нет этого разрешения ваше приложение не получит загрузки завершено намерение.

+0

Вы уверены, что перед ICS не требовалось 'android.permission.RECEIVE_BOOT_COMPLETED'? –

+0

@LalitPoptani Да, я тоже добавил – 2013-05-03 06:52:41

1

Как только пользователь запускает приложение в первый раз (и не отключает его), все ведет себя по-прежнему - перезагрузка приведет к принятию широковещательных сообщений BOOT_COMPLETED и так далее. Однако, если пользователь устанавливает приложение, до тех пор, пока он не запустит приложение вручную, никакие трансляции не будут получены. И если пользователь принудительно останавливает приложение, до тех пор, пока он не запустит приложение вручную, никакие трансляции не будут получены.

Check this для получения более подробной информации.