4

我正在使用安卓同步适配器。当系统启动同步时,我的应用程序将被启动,或者将调用 onCreate() 方法。

在我的应用程序中,我继承了 Application 类并在 onCreate() 函数中编写了一些自定义代码。如果同步适配器启动应用程序,我不希望执行这些自定义代码。

我想知道如何检测应用程序是否由同步适配器启动?谢谢。

4

1 回答 1

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;
        }
    }
}
于 2015-09-03T17:03:50.263 回答