3

アプリに GCM (Google Cloud Messaging) を実装しています。

Googleチュートリアルのようにすべて設定しましたが、これまでのところ機能しています。

が呼び出されたonMessageときに、通知バーに通知を表示します。GCMIntentService

これで、アプリがフォアグラウンドにあるかどうかを通知するメソッドができました。アプリがバックグラウンドにある場合、問題なくバーに通知が表示されます。

しかし、どうすればユーザーにダイアログを表示できますか?

私が電話するとき:

AlertDialog.Builder builder = new AlertDialog.Builder(context);

context は から与えられたコンテキストonMessage()です。もちろん、このエラー:

_Notification.showPopUp() エラー: android.view.WindowManager$BadTokenException: ウィンドウを追加できません -- トークン null はアプリケーション用ではありません

そのため、コンテキストを に置き換えようとしましたMainActivity.this。この目的のために、静的変数に保存しました。しかし、今それを実行すると、何も起こらず、エラーもダイアログも表示されません。

ダイアログの私のコード:

private static AlertDialog.Builder myAlertDialog;

private static void showPopUp(Context context,String kind, String resource_name, Integer resource_id)
{
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Are you sure you want to exit?")
        .setCancelable(false)
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
        {
        public void onClick(DialogInterface dialog, int id) 
            {
            }
        })
        .setNegativeButton("No", new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int id) 
            {
                dialog.cancel();
            }
        });

    AlertDialog alert = builder.create();
alert.show();

Log.e("TEST","alert.show()");
}

最後のログ: alert.show() が logcat に表示されますが、エラーはありません。

仕様: デバイス (Galaxy S2) Android 4.0.3 で動作

誰かが私のコードの何が問題なのか教えてもらえますか、または誰かが回避策を知っていますか?

編集:

私が保存する部分MainActivity.this

private static Context context_forshowingPopUp = null;

onCreate

//Set the context for showing a popup View
_Notification.setContext_forshowingPopUp(this);

AlertDialog.Builder builder = new AlertDialog.Builder(getContext_forshowingPopUp());

public static Context getContext_forshowingPopUp() 
{
    return context_forshowingPopUp;
}

public static void setContext_forshowingPopUp(Context context_forshowingPopUp) 
{
    _Notification.context_forshowingPopUp = context_forshowingPopUp;
}
4

1 に答える 1

0

Alertdialog を構築するときは、YourCurrentActivity.this をコンテキストとして使用する必要があります。以下のように解くことができます。

ファーストクラス :

  public class Config{
     public static Context context;

    }

アクティビティが を作成するときは、Config.contex を設定するだけです

   public class MyActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
      Config.context=this;
    ...}
    //other stuffs

      }

OnMessage で

   showPopUp(Config.context,kind, resource_name, resource_id);
于 2012-09-19T14:20:22.697 に答える