2013-05-03 5 views
0

안녕하세요 저는 활동을 사용하는 서비스 응용 프로그램을 개발했으며 2.2 and 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"); 
    } 
} 

매니페스트 :

<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+에서 서비스를 설치하면 설치 후 최소한 한 번 응용 프로그램을 시작 (시작)하지 않으면 서비스가 부팅되지 않습니다. 따라서 응용 프로그램을 설치하고 응용 프로그램 MainActivity를 시작하기 전에 장치를 다시 시작하면 BroadCastReceiver가 실행되지 않습니다. 이를 위해서는 MainActivity를 한 번 실행 한 다음 장치를 다시 시작해야합니다. 그게 효과가있어!

참조를 위해 여기 내 question을 확인할 수 있습니다.

+0

내 서비스가 내 서비스를 구현하는 장치에 설치 한 후 내 서비스를 실행하는 방법을 말해 줄 수 있습니까? –

+0

활동이있는 경우 활동'onCreate()'에서 서비스를 시작할 수 있지만 3.1 이상에서는 응용 프로그램 설치시 서비스를 시작할 수 없습니다. –

+0

감사합니다. onCreate() 메소드는 3.1 이하에서 작동합니다. –

0

당신은 추가해야 부트를받을 수 없습니다 앱 의도를 완료 android.permission.RECEIVE_BOOT_COMPLETED,

.

+0

ICS 이전에'android.permission.RECEIVE_BOOT_COMPLETED'이 필요하지 않았습니까? –

+0

@LalitPoptani 예 너무 추가했습니다 –

1

처음으로 사용자가 응용 프로그램을 실행하고 강제 종료하지 않으면 모든 것이 이전과 같이 작동합니다. 재부팅하면 BOOT_COMPLETED 브로드 캐스트가 수신됩니다. 그러나 사용자가 앱을 수동으로 실행하기 전까지 또는 실행하지 않을 경우 브로드 캐스트가 수신되지 않습니다. 사용자가 응용 프로그램을 수동으로 실행하기 전까지 그리고 실행하지 않는 한 사용자가 강제로 앱을 중지하면 브로드 캐스트가 수신되지 않습니다.

Check this 자세한 내용은