2011-07-22 13 views
0

Toastで受信した各メッセージを処理すると、私はC2DMの実装を実装しています。C2DM受信時にAlertDialogを表示

代わりに、ユーザーがメッセージを確認するために「OK」と言う警告ダイアログを使用したいと思います。

このために書いたコードは、show()行で例外を生成します。問題は使用されたコンテキスト(?)と関係していると思います。

AlertDialog.Builder alertbox = new AlertDialog.Builder(context); 
alertbox.setMessage("Received Push Notification"); 
alertbox.setNeutralButton("OK", new DialogInterface.OnClickListener() { 

    public void onClick(DialogInterface arg0, int arg1) { 
    // TODO Auto-generated method stub 

    } }); 
    AlertDialog alert = alertbox.create(); 
    alert.show(); 

全クラス(コメントに要求されるように):

public class MyC2DM 

extends BroadcastReceiver { 
    public MyC2DM() 
    { 


    } 

    @Override 
    public void onReceive(Context context, Intent intent) 
     { 
      Log.i("Recieve","2"); 
      //Toast.makeText(context, "Intent Receive!", Toast.LENGTH_SHORT).show(); 
      if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) 
      { 
       handleRegistration(context, intent); 
      } 
      else if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) 
      { 
       handleMessage(context, intent); 
      } 
     } 

     private void handleRegistration(Context context, Intent intent) 
     { 

      String registration = intent.getStringExtra("registration_id"); 
      if (intent.getStringExtra("error") != null) 
      { 
       Toast.makeText(context, "Reg Error!", Toast.LENGTH_LONG).show(); 
       // Registration failed, should try again later. 
      } 
      else if (intent.getStringExtra("unregistered") != null) 
      { 
       // unregistration done, new messages from the authorized sender will be rejected 
       Toast.makeText(context, "Unreg!", Toast.LENGTH_LONG).show(); 
      } 
      else if (registration != null) 
      { 
       // Send the registration ID to the 3rd party site that is sending the messages. 
       // This should be done in a separate thread. 
       // When done, remember that all registration is done. 

      // UserId = customer.getId(); 
      // Log.i("id",String.valueOf(UserId)); 

       String RegId = registration; 
       Log.i("reg",String.valueOf(RegId)); 
      } 
     } 

     private void handleMessage(Context context, Intent intent) 
     { 
      // Message handler. 
      Log.i("Recieve","MESSAGE"); 

      AlertDialog.Builder alertbox = new AlertDialog.Builder(context); 
      alertbox.setMessage("Received Push Notification"); 

      alertbox.setNeutralButton("OK", new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface arg0, int arg1) { 
        // TODO Auto-generated method stub 

       } }); 
      AlertDialog alert = alertbox.create(); 
      alert.show(); 

      /*Toast.makeText(context, "ALERT: " + intent.getStringExtra("payload"), Toast.LENGTH_LONG).show();*/ 

     } 
} 
+0

あなたはこれらのコードをどこに入れましたか?文脈に問題がない場合はどこですか? – Rasel

+0

これは 'private class handleMessage(Context context、Intent intent)'内で 'public class MyC2DM extends BroadcastReceiver'にあります。 – mctedo

+0

提出するクラス全体を追加しました。 – mctedo

答えて

0

BroadcastReceiverとService.Use通知からダイアログを表示する方法はありません代わりに

0

ダイアログを表示することはできませんBroadcastReceiverで。私も同じ問題がありました。私はアンドロイドからスタイルを継承したアクティビティを作成しました:style/Theme.Dialog。これにより、アクティビティはダイアログのようになりました。

関連する問題