pra*_*gai 4 android broadcastreceiver
我在Activity课堂上使用过计时器方法.在那个方法中,我有一个从Activity类到BroadcastReceiver类的意图.
本BroadcastReceiver课程将使用后台每15分钟拨打一次AlarmManager.
当我打电话给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);
}
Run Code Online (Sandbox Code Playgroud)
BroadcastReceiverClass.java
public void onReceive(Context context, Intent intent)
{
dialogMethod();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能提高一个AlertDialog从BroadcastReceiver类从后台进程?
如果您的活动在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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
如果您将BroadcastReceiver设置为Activity的内部类,则此方法有效.
简而言之:这是没有可能的.
只有Activity可以创建/显示对话框.事实上,这已被问过一次:
此外,这会给用户带来非常糟糕的体验:
实际上,您可以创建/显示Toast来自BroadcastReceiver.Toast当用户不在"您的应用程序中"时,也会显示此信息.
此外,您还可以发送通知(显示在屏幕顶部的通知栏中)BroadcastReceiver.一个关于如何做到这一点的教程(它不会从你如何在活动中做到这一点不同,不同之处在于使用通过Context从-object onReceive-方法).
当用户不在"您的应用程序"中时,也会显示通知,并且IMO是此问题的最佳解决方案.
| 归档时间: |
|
| 查看次数: |
11257 次 |
| 最近记录: |