从设置中隐藏同步适配器的虚拟帐户

Posted

技术标签:

【中文标题】从设置中隐藏同步适配器的虚拟帐户【英文标题】:Hide dummy Account for Sync Adapter from Settings 【发布时间】:2013-11-02 22:53:31 【问题描述】:

我使用虚拟帐户创建了一个同步适配器,我不希望它出现在“设置”应用程序的“帐户”列表中,也不想在用户按下“设置”中的“添加帐户”按钮时出现。我在同步适配器定义中尝试了 android:userVisible="false" ,但该帐户仍然出现。我已经在模拟器和 3 个物理设备上尝试过这个。就同​​步我需要的所有数据而言,一切正常,唯一的错误是我在列表中看到了该帐户,而我不想这样做。

我的authenticator.xml 是:

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
                   android:accountType="net.astagor.android.hhp.account"
                   android:icon="@drawable/ic_launcher"
                   android:smallIcon="@drawable/ic_launcher"
                   android:label="@string/app_name"
    />

我的 syncadapter.xml 是:

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
          android:contentAuthority="net.astagor.android.hhp"
          android:accountType="net.astagor.android.hhp.account"
          android:userVisible="false"
          android:supportsUploading="true"
          android:allowParallelSyncs="false"
          android:isAlwaysSyncable="true"
    />

然后我像这样添加我的适配器:

 Account account = AuthenticatorService.GetAccount();

 AccountManager accountManager = (AccountManager) context
    .getSystemService(Context.ACCOUNT_SERVICE);

 if (accountManager.addAccountExplicitly(account, null, null)) 

ContentResolver.setIsSyncable(account, StubProvider.AUTHORITY, 1);

ContentResolver.setSyncAutomatically(account,
        StubProvider.AUTHORITY, true);

ContentResolver.addPeriodicSync(account, StubProvider.AUTHORITY,
        new Bundle(), SYNC_FREQUENCY);
 

我在帐户列表和添加帐户列表中获得了该帐户。

请帮忙! :)

【问题讨论】:

我对这个问题的答案很感兴趣(如果有更好的方法) 这里有同样的问题。像您一样从文档中获取所有内容 - 不希望虚拟帐户可见,但它总是显示! :-(这里出了什么问题? 【参考方案1】:

我找到了解决方案。 这是authenticator.xml 的样子:

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
                   android:accountType="net.astagor.android.hhp.account"

    />

你不能有这些行:

               android:icon="@drawable/ic_launcher"
               android:smallIcon="@drawable/ic_launcher"
               android:label="@string/app_name"

如果您放置它们,无论您是否设置了 android:userVisible="false",该帐户都将可见。

【讨论】:

尽管在可用帐户列表中您仍然会看到一个空白行,如果您转到“设置”>“添加帐户”,我现在顶部有一个空白行。您还会收到设置应用程序在日志中打印的警告以及您的包名称。也不理想:2671-2671/? W/ChooseAccountActivity﹕帐户类型 my.package.name.account 2671-2671/ 没有标签资源? W/ChooseAccountActivity﹕帐户类型 my.package.name.account 2671-2671/ 没有图标资源? W/AuthenticatorHelper﹕帐户类型 my.package.name.account 没有标签图标 没错,添加帐户列表中有一个空位置。那么人们如何使用虚拟帐户,或者他们根本不使用同步适配器?【参考方案2】:

这不是一个真正的答案,但是如果您从 authenticationator.xml 中删除标签,它不会显示在已添加帐户的列表中,但在单击添加帐户后,该图标在列表中没有标签。丑陋,可能不是一个好主意。 (此方法至少在我运行 4.4 的 nexus 4 上隐藏帐户 - 尚未检查其他设备)。

我相信同步适配器中的用户可见标志只会在选择帐户后影响同步部分的显示,您可以在其中查看上次同步时间、设置自动同步设置和触发同步。

我也很想知道这一点。这一定是可能的,因为我没有看到我的帐户列表中到处都是虚拟帐户。所以要么有办法,要么我安装的应用程序几乎没有一个与同步适配器有关?

【讨论】:

以上是关于从设置中隐藏同步适配器的虚拟帐户的主要内容,如果未能解决你的问题,请参考以下文章

VM虚拟机网络设置

android 1080p屏幕 有无虚拟按键的适配

Android适配底部虚拟按键的方法

虚拟机与宿主机之间使用同一个网段方法

如何从客户端隐藏工作灯适配器过程,但对服务器可见?

面对 MFP 控制台错误 FWLSE0325:运行时同步失败,如何从数据库中取消部署移动适配器