有没有办法在启动 GCM 注册过程 API 8 之前检查用户是否在他的设备上添加了他的谷歌帐户?
当尝试在没有它的情况下注册时,应用程序会在关闭时发出警告,因此请先检查,提醒用户并关闭应用程序。
有没有办法在启动 GCM 注册过程 API 8 之前检查用户是否在他的设备上添加了他的谷歌帐户?
当尝试在没有它的情况下注册时,应用程序会在关闭时发出警告,因此请先检查,提醒用户并关闭应用程序。
我查看了 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" />
在清单中
您需要验证从 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.!
}
有关错误处理的更多信息,请查看文档
关于如何捕获异常的问题:
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() 抛出异常。如果您不捕获异常,应用程序将崩溃。
我也不认为语法都是正确的,但是这段代码会让你知道该怎么做。