2013-05-31 2 views
4

나는 android sync adapter를 사용하고 있습니다. 시스템에서 동기화가 시작되면 응용 프로그램이 시작되거나 onCreate() 메서드가 호출됩니다.응용 프로그램이 동기화 어댑터에 의해 시작되었음을 감지했습니다.

내 응용 프로그램에서는 응용 프로그램 클래스를 상속하고 onCreate() 함수에 사용자 지정 코드를 작성합니다. 동기화 어댑터가 앱을 시작하면이 맞춤 코드를 실행하지 않아도됩니다.

응용 프로그램이 동기화 어댑터로 시작되었는지 어떻게 알 수 있습니까? 감사.

답변

2

매니페스트 파일에 동기화 프로세스의 프로세스 이름을 확인하십시오 (내 경우는 "동기화")

<service 
     android:name=".sync.SyncService" 
     android:exported="true" 
     android:process=":sync"> 
     <intent-filter> 
      <action android:name="android.content.SyncAdapter"/> 
     </intent-filter> 
     <meta-data android:name="android.content.SyncAdapter" 
      android:resource="@xml/syncadapter" /> 
    </service> 

당신은 현재의 프로세스 이름을

public String getCurrentProcessName(Context context) { 
    // Log.d(TAG, "getCurrentProcessName"); 
    int pid = android.os.Process.myPid(); 
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) 
    { 
     // Log.d(TAG, processInfo.processName); 
     if (processInfo.pid == pid) 
      return processInfo.processName; 
    } 
    return ""; 
} 

전화를 얻을 수있는 방법이 필요합니다 Application.onCreate의 위 코드는 현재 프로세스가 동기화되었는지 여부를 감지합니다.

public class MyApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 

     String processName = Helper.getCurrentProcessName(this); 
     if (processName.endsWith(":sync")) { 
      Log.d(TAG, ":sync detected"); 
      return; 
     } 
    } 
} 
관련 문제