2011-12-06 6 views
2

私は、外部パッケージが見つからない可能性を扱うことによってパッケージをインストールする必要があることをユーザーに通知する最善の方法を探しています。Android C2DM - スタートサービスのインテントを処理する最良の方法は見つかりませんか?

私はC2DMMessagingクラスのTODO: if intent not found, notification on need to have GSF

​​

を実装したいのです。この特定のケースでは、私は、エラーW/ActivityManager( 60): Unable to start service Intent { act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android.gsf (has extras) }: not found

を探すべきだと考えていますしかし、どのようにトラップそのエラーをしますか?

UPDATE - サービスの開始に失敗した場合だけSTARTSERVICEの呼び出しがnullであるコンポーネント名のインスタンスを返すことがわかったので、私のコードは、今、このソリューションUtilのを探している人のために、この

ComponentName name = context.startService(registrationIntent); 
// TODO: if intent not found, notification on need to have GSF 
if(name == null){ 
    Util.log_debug_message("@@@@ REG INTENT FAILED"); 
}else{ 
    Util.log_debug_message("@@@@ REG INTENT SUCCEEDED"); 
} 

(ように見えます.log_debugは、utilクラスでLog.dを呼び出すために作成した関数なので、これをLog.dの呼び出しで置き換えてください)

これはうまくいくと思われるので、私はブロードキャストメッセージを送る必要があると思いますパッケージをインストールする必要があることを示す余分なもの。受信者は、ユーザーがインストールする必要があることを示す警告ダイアログを表示することができます。

ユーザーは何をインストールする必要がありますか?ユーザーはインストールする必要があるものをどのようにインストールするのですか?

任意のヒントを事前に感謝し、ポインタのコードスニペットと、私はこの問題を解決してきた

+0

のように開始し、おそらくマニフェストファイルにあなたのサービスを追加していないことを確認するためにチェックを追加しました。 – Umesh

+0

サービスをマニフェストに追加したかどうかは、実際には何の問題もありません。しかし、とにかくありがとう – jamesc

+1

良い方法があるかどうかわかりませんが、ログを読んで明示的にこれらの種類のエラーを探すことができます。 http://coderzheaven.com/2011/07/how-to-read-logcat -contents-programmatically-in-android/ – Umesh

答えて

1

を助ける - C2DMの登録イベントを呼び出すアクティビティでは、私はこのコード

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
    register(); 
} 

protected void register() { 
    String reg_id = C2DMessaging.getRegistrationId(this); 
    String email = Util.getEmail(this); 
    if(reg_id == null || reg_id == ""){ 
     Util.log_debug_message("@@@@ Registering with C2DM"); 
     Toast.makeText(this, "Registering with C2DM", Toast.LENGTH_LONG).show(); 
     if(C2DMessaging.register(this, Config.C2DM_SENDER)){ 
      showLoadingDialog(); 
     }else{ 
      showInstallGSFDialog(); 
     } 
    }else if(email == null || email =="-1"){ 
     Util.log_debug_message("**** Updating server with new auth token"); 
     register_with_server(); 
    } 
} 

private void showInstallGSFDialog(){ 
    AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
    alertDialog.setTitle("ERROR!"); 
    alertDialog.setMessage("Please ensure you have a valid GMail account set up on your phone." + 
    " This application needs to use Google's C2DM service"); 
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 

     return; 

     } }); 
    alertDialog.show(); 
    } 

を持っていると私は変更ブール方法にC2DMessaging.registerとサービスはとても...

/** 
* Initiate c2d messaging registration for the current application 
*/ 
public static boolean register(Context context, String senderId) { 
    boolean res = false; 
    Intent registrationIntent = new Intent(REQUEST_REGISTRATION_INTENT); 
    registrationIntent.setPackage(GSF_PACKAGE); 
    registrationIntent.putExtra(EXTRA_APPLICATION_PENDING_INTENT, 
      PendingIntent.getBroadcast(context, 0, new Intent(), 0)); 
    registrationIntent.putExtra(EXTRA_SENDER, senderId); 
    ComponentName name = context.startService(registrationIntent); 
    // if intent not found, notification on need to have GSF by NOT setting resukt of this function to true 
    if(name == null){ 
     Util.log_debug_message("@@@@ REG INTENT FAILED"); 
    }else{ 
     Util.log_debug_message("@@@@ REG INTENT SUCCEEDED"); 
     res = true; 
    } 
    return res; 
} 
関連する問題