在Android中处理C2DM错误ACCOUNT_MISSING

3
C2DM注册可能会出现错误ACCOUNT_MISSING。根据文档,必须处理此错误,方法如下:“应用程序应要求用户打开帐户管理器并添加Google帐户。”
我想从应用程序中为用户提供此选项。我看到有两种显示此屏幕的方法:
//Intent
context.startActivity(newIntent(Settings.ACTION_ADD_ACCOUNT).putExtra(Settings.EXTRA_AUTHORITIES, new String[] {?}));

这个解决方案的问题在于,我尝试了几个额外权限("com.google"、"com.google.android.gsf"等),但没有显示任何内容。如果省略参数EXTRA_AUTHORITIES,则会显示所有手机账户。
//Account manager    
AccountManager.get(context).addAccount("com.google", null, null, null, this, new AccountManagerCallback<Bundle>() {
public void run(AccountManagerFuture<Bundle> accountManagerHandle) {
            //TODO Handle response.
        }
    }, null);
}

这种解决方案的问题在于它需要 MANAGE_ACCOUNTS 权限,用户可能不愿意为此额外授权。你会如何处理这种情况?

1
我将使用基于AccountManager的方法。显然,没有人发现了Google账户的EXTRA_AUTHORITIES值。很遗憾,Google没有提供任何提示来使推送错误处理更加用户友好。 - Diego Gómez Olvera
1个回答

1

对于 EXTRA_AUTHORITIES 字段,您可以使用 “gmail-ls” 仅显示 Google 帐户选择器。

经过大量谷歌搜索,我在 android.provider.Gmail 源代码中找到了该常量:

public static final String AUTHORITY = "gmail-ls"

这个类不属于公共API,所以作为解决方案它有点脆弱 :-(。


更好的链接:http://www.androidjavadoc.com/m3-rc37a/constant-values.html#android.provider.Gmail.AUTHORITY - tonys
一个小细节是,当用户禁用 Gmail 应用时,它将无法工作。 - Kazuki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接