7

有没有办法在启动 GCM 注册过程 API 8 之前检查用户是否在他的设备上添加了他的谷歌帐户?

当尝试在没有它的情况下注册时,应用程序会在关闭时发出警告,因此请先检查,提醒用户并关闭应用程序。

4

3 回答 3

16

我查看了 checkDevice() 的源代码,据我所知,它只检查 API 级别并且 gcm 包在设备上。因此,按照 CommonsWare 的建议,这段代码似乎为我完成了这项工作:

private boolean deviceHasGoogleAccount(){
        AccountManager accMan = AccountManager.get(this);
        Account[] accArray = accMan.getAccountsByType("com.google");
        return accArray.length >= 1 ? true : false;
}

你需要这条线

 <uses-permission android:name="android.permission.GET_ACCOUNTS" />

在清单中

于 2012-11-24T13:38:30.233 回答
3

您需要验证从 GCM 获得的响应,如果您收到 ACCOUNT_MISSING 则您可以处理错误。

在你GCMIntentService Class的方法onRegistered() onUnregistered() onMessage() onError()中,在你的onError()方法中

/**
 * Method called on Error
 * */
@Override
public void onError(Context context, String errorId) {
    Log.i(TAG, "Received error: " + errorId);
    // HANDLE IF GCM SERVER SENT ERROR MESSAGES.!
}

在此处输入图像描述

有关错误处理的更多信息,请查看文档

于 2013-01-10T05:29:20.900 回答
0

关于如何捕获异常的问题:

try
{
    GCMRegistrar.checkDevice(context);
    System.out.println("Device has GCM capabilities. So registering for GCM");
   //// write code here to register for GCM
}
catch(Exception e)
{
    System.out.println("Cannot cregister for GCM");
}

这是捕获异常的逻辑。因此,如果在 try 之后部分抛出任何异常,则部分在 catch 之后的代码将被执行。checkDevice() 抛出异常。如果您不捕获异常,应用程序将崩溃。

我也不认为语法都是正确的,但是这段代码会让你知道该怎么做。

于 2012-11-24T19:01:59.470 回答