0

我正在尝试确定sync adapters已安装应用程序提供的列表,但我找不到任何链接同步权限和处理它的包/应用程序的东西?

使用AccountManager.getAccountsByType只提供帐户,根本没有权限或包信息。

UsingContentResolver.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 回答