0

インストールされているアプリが提供するリストを特定しようとしてsync adaptersいますが、同期機関とそれを処理するパッケージ/アプリをリンクするものが見つかりませんか?

を使用AccountManager.getAccountsByTypeすると、アカウントのみが提供され、権限やパッケージ情報はまったく提供されません。

を使用ContentResolver.getSyncAdapterTypes()すると、利用可能なすべての同期権限が提供されますが、どれがどれを処理しているかを判断できませんpackage/app

sync adapters特定のapp/package handles、またはタイトルのように、特定の同期アダプターを処理するパッケージを特定する方法はありますか?

これについて助けてくれてありがとう。

4

1 に答える 1

1

実際には非常に簡単でした。パッケージにはすべてのコンポーネントが PackageInfo で定義されているのに対し、同期アダプターからパッケージを見つけようとして、すべてを間違った方法で行っていました。

以下のコードは、特定のパッケージ (pkg_name) の同期アダプターであるすべてのパッケージ プロバイダーを検出します。

            SyncAdapterType[] types = ContentResolver.getSyncAdapterTypes();
            int J = types.length;

            PackageInfo pi = pm.getPackageInfo(pkg_name, PackageManager.GET_PROVIDERS);
            if (pi.providers != null)
            {
                int I = pi.providers.length;
                for(int i = 0; i < I; i++)
                {
                    ProviderInfo p = pi.providers[i];
                    for(int j = 0; j < J; j++)
                    {
                        SyncAdapterType sat = types[j];

                        if (p.authority.equals(sat.authority))
                        {
                            // This provider is a sync adapter

上記のコードには、特定の権限が必要です。

<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
于 2015-02-11T11:54:12.150 に答える