7

GCM登録手順API8を開始する前に、ユーザーが自分のデバイスに自分のGoogleアカウントを追加したかどうかを確認する方法はありますか?

それなしで登録しようとすると、アプリは閉じるときに予期せず停止したという警告を表示します。最初に確認して、ユーザーに警告してアプリを閉じてください。

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 に答える