Когда будильник в Android отключен, я хочу создать AlertDialog. Кроме того, я хочу создать уведомление, в зависимости от того, какой параметр пользователь нажимает на переключатели в диалоговом окне. Проблема возникает, когда я пытаюсь использовать context
или getApplicationContext()
.Использование контекста внутри класса, расширяющего BroadcastReceiver
Это мой код:
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(){}
Любые предложения о том, идти вперед?
EDIT:
До сих пор, это то, что я пробовал:
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
, i'v непосредственно использовали 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
Пожалуйста, помогите!
вы можете использовать context.getApplicationContext(). –
Теперь это еще одна проблема. Вы не можете показывать диалог без активности. Создайте новую активность и покажите диалог. –
попытайтесь использовать 'Activity cxt = (Activity) context;' и использовать cxt как ваш контекст –