3

Android のアラームが鳴ったら、AlertDialog を作成したいと思います。また、ユーザーがダイアログのラジオ ボタンをクリックするオプションに応じて、通知を作成したいと考えています。contextまたはを使用しようとすると問題が発生しますgetApplicationContext()

これは私のコードです:

public void onReceive(final Context context, Intent intent)
{
    final CharSequence[] items = {" I'm taking the dose now! "," Remind again in ten minutes. "," Ignore for now. "};
    String doseName = intent.getStringExtra("doseName");
    Toast.makeText(context, "Take medicine: " + doseName, Toast.LENGTH_LONG).show();

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("It's time for your medicine.");
    builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            switch(item)
            {
            case 0:
                Toast.makeText(context, "Good.", Toast.LENGTH_SHORT).show();
                break;
            case 1:
                Toast.makeText(context, "Reminder set in ten minutes.", Toast.LENGTH_SHORT).show();
                break;
            case 2:
                Intent service1 = new Intent(context, DoseAlarmService.class);
                service1.putExtra("doseName", doseName);
                context.startService(service1);
                break;
            }
        }
    });
    levelDialog = builder.create();
    levelDialog.show();
}   

スイッチケースのgetApplicationContext代わりに使用してみましたが、これは正確なエラーです:context

The method getApplicationContext() is undefined for the type new DialogInterface.OnClickListener(){}

前進する方法について何か提案はありますか?

編集:

今まで、これらは私が試したことです:

public void onReceive(final Context context, Intent intent)
{
        ctx = context;
    final CharSequence[] items = {" I'm taking the dose now! "," Remind again in ten minutes. "," Ignore for now. "};
    String doseName = intent.getStringExtra("doseName");
    Toast.makeText(ctx, "Take medicine: " + doseName, Toast.LENGTH_LONG).show();

    AlertDialog.Builder builder = new AlertDialog.Builder(ctx.getApplicationContext());
    builder.setTitle("It's time for your medicine.");
    builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            switch(item)
            {
            case 0:
                Toast.makeText(ctx, "Good.", Toast.LENGTH_SHORT).show();
                break;
            case 1:
                Toast.makeText(ctx, "Reminder set in ten minutes.", Toast.LENGTH_SHORT).show();
                break;
            case 2:
                Intent service1 = new Intent(ctx.getApplicationContext(), DoseAlarmService.class);
                service1.putExtra("doseName", doseName);
                ctx.startService(service1);
                break;
            }
        }
    });
    levelDialog = builder.create();
    levelDialog.show();
}   

また、使用する代わりにctx、直接使用context.getApplicationContext()して確認しました。うまくいきません。

また、問題のある領域をすべてコメントアウトし、実行してダイアログボックスが表示されることを確認すると、次の例外が発生します。

07-23 13:26:21.316: E/AndroidRuntime(1756): java.lang.RuntimeException: Unable to start receiver com.dosemanager.ui.DoseAlarmReceiever: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

助けてください!

4

3 に答える 3