我在Activity
课程中使用过计时器方法。在那个方法中,我有一个从Activity
类到BroadcastReceiver
类的意图。
此BroadcastReceiver
课程将使用AlarmManager
在后台每15分钟拨打一次。
当我致电BroadcastReceiver
课程时,我想提出AlertDialog
。
public void timerMethod(){
Intent intent = new Intent(Activity.this,
BroadcastReceiverClass.class
);
PendingIntent sender = PendingIntent.getBroadcast(
QualityCallActivity.this,0, intent, 0
);
// We want the alarm to go off 30 seconds from now.
long firstTime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
firstTime, 60*1000, sender);
}
BroadcastReceiverClass.java
public void onReceive(Context context, Intent intent)
{
dialogMethod();
}
如何从后台流程中提取AlertDialog
类BroadcastReceiver
?
答案 0 :(得分:7)
如果您的活动在BroadcastReceiver获取意图时正在运行,您应该能够使用runOnUiThread
来运行创建AlertDialog的方法,例如:
public void onReceive(Context context, Intent intent)
{
runOnUiThread(new Runnable() {
public void run() {
AlertDialog.Builder d = new AlertDialog.Builder(MyActivity.this);
b.setMessage("This is a dialog from within a BroadcastReceiver");
b.create().show();
}
});
}
如果您将BroadcastReceiver设置为您的Activity的内部类,则此方法有效。
答案 1 :(得分:6)
简而言之:不可能。
只有活动可以创建/显示对话框。事实上,这已被问过一次:
此外,这会给用户带来非常糟糕的体验:
事实上,您可以从BroadcastReceiver
创建/显示Toast
。当用户不在“您的应用程序中”时,也会显示此Toast
。
此外,您还可以从BroadcastReceiver
发送通知(显示在屏幕顶部的通知栏中)。 tutorial on how to do this {与您在活动中的操作方式没有区别,只是您使用Context
- 方法中传递的onReceive
- 对象。
当用户不在“您的应用程序”中时,也会显示通知,并且IMO是此问题的最佳解决方案。
答案 2 :(得分:0)
1)在活动中:
public static Context ctx;
onCreate {
ctx = this;
}
public void showAlertDialog(Context context, String title, String message) {
final AlertDialog alertDialog = new AlertDialog.Builder(context).create();
// Setting Dialog Title
alertDialog.setTitle(title);
// Setting Dialog Message
alertDialog.setMessage(message);
// Setting OK Button
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Okay",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which)
{
alertDialog.dismiss();
}
});
// Showing Alert Message
alertDialog.show();
}
2)在BroadcastReceiver.onReceive
:
YourActivity ac= new YourActivity ();
ac.showAlertDialog(YourActivity.ctx, "test", "test");