2012-05-21 5 views
0

가능한 중복 :
Trying to start a service on boot on Android장치 부팅시 서비스를 시작하는 방법은 무엇입니까?

브로드 캐스트 리시버

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class StartActivityAtBoot extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 
      Intent i = new Intent(context, CompareIMSI.class); 
      context.startService(i); 
     } 
    } 
} 

CompareSIM.java

import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.IBinder; 
import android.telephony.TelephonyManager; 
import android.widget.Toast; 

public class CompareIMSI extends Service{ 

    Context context; 
    TelephonyManager operator; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show(); 
     //compareSIM(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 
     Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
     compareSIM(); 
    } 

    public void compareSIM(){ 

     final String STORAGE = "Storage"; 
     SharedPreferences unique = getSharedPreferences(STORAGE, 0); 
     final String storedIMSI = unique.getString("simIMSI", ""); 
     final String currentIMSI = getSubscriberId().toString(); 

     if (!storedIMSI.equals(currentIMSI)){ 
      Intent i = new Intent(CompareIMSI.this, ScreenLockActivity.class); 
      startActivity(i); 
     } 
    } 

    public String getSubscriberId(){ 

     String IMSI = null; 
     String serviceName = Context.TELEPHONY_SERVICE; 
     TelephonyManager m_telephonyManager = (TelephonyManager) getSystemService(serviceName); 
     IMSI = m_telephonyManager.getSubscriberId(); 
     return IMSI; 
    } 
} 

내가 일을하고 싶습니다 e 응용 프로그램을 부팅 할 때 부팅 할 때 compareSIM 서비스를 시작하려면이 서비스가 현재 연결된 SIM 카드로 실행됩니다. IMSI가 검색되어 이미 저장되어있는 IMSI와 일치하면 일단 사용자가 로그인 레이아웃으로 가져옵니다 . 나는 당신과 같이 안드로이드 매니페스트의 브로드 캐스트 리시버를 등록해야

+0

이 코드를 실행할 때 어떤 현상이 발생합니까? –

+0

서비스가 부팅되는 중이거나하지 않습니까? –

답변

0

감사, 부팅 중에이를 수행하고 싶지만 좋은 말 ... 그렇게 코딩에 나에게 조언을하지 못했습니다 또한

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

매니페스트에이 권한이 있는지 확인하십시오.

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

나는 이미 매니페스트에서 그랬다 –

+0

그리고 BroadcastReceiver가 BOOT 장치에서 작동합니까? 거기에 디버그 로깅을 추가하고 logcat이 실행 중인지 확인하십시오. 서비스가 시작되는지 확인하십시오. 얼마나 멀리 나옵니까? logcat에 오류가 있습니까? –

0

androidManifest 파일을 확인하십시오. androidManifest 파일에 수신기를 추가해야합니다.

<receiver android:name=".......StartActivityAtBoot" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.HOME" /> 
     </intent-filter> 
    </receiver> 
2

floow BOOT에 서비스를 진술에 대해 다음 단계 :

1 단계 :의 AndroidManifest.xml에서 같이 BOOT_COMPLETED 권한을 추가

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

2 단계 : AndroidManifest를에서. xml 수신자를 다음과 같이 등록하십시오 :

<receiver android:name=".StartActivityAtBoot" android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</receiver> 
,

3 단계 :의 AndroidManifest.xml에서이 서비스 등록과 같이

public class StartActivityAtBoot extends BroadcastReceiver 
{ 
    static final String ACTION = "android.intent.action.BOOT_COMPLETED"; 
    public void onReceive(Context context, Intent intent) 
    { 
     if (intent.getAction().equals(ACTION)) 
     { 
        context.startService(new Intent(context, 
        CompareIMSI.class), null); 
      Toast.makeText(context, "CompareIMSI service has started!", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

이에 서비스를 시작하는 방법에 대한 모든 : 3

<service android:name=".CompareIMSI"> </service> 

단계 :로 StartActivityAtBoot에서이 서비스를 시작합니다 부팅. 감사합니다.

관련 문제