【发布时间】:2013-02-04 11:14:26
【问题描述】:
我正在使用 AlarmManager 在 5 分钟后将 PendingIntent 传递给我的 BroadcastReceiver。现在,我想在闹钟响起时用户可能正在使用的任何应用程序之上向用户显示DialogFragment。例如,如果闹钟响起时用户正在使用 Chrome,我的DialogFragment 应该会在用户的 Chrome 窗口上方弹出。
我最终得到的是 DialogFragment 以我的应用程序的空白活动作为背景显示(如下图所示)
http://i.stack.imgur.com/Vz9IZ.png
这是我在BroadcastReceiver 中使用的代码,用于首先启动FragmentActivity:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
Intent hardReminderIntent = new Intent(context, AlarmHardActivity.class);
hardReminderIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(hardReminderIntent);
}
}
接下来,从这个活动中,我弹出DialogFragment:
public class AlarmHardActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fm = getSupportFragmentManager();
AlarmHardDialog editNameDialog = new AlarmHardDialog();
editNameDialog.show(fm, "fragment_dialog");
//setContentView(R.layout.activity_alarm_hard);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.activity_alarm_hard, menu);
return true;
}
}
我的问题:
我找不到直接从我的
onReceive中的BroadcastReceiver调用getSupportFragmentManager的方法,因此假设获得对话的唯一方法是首先调用“虚拟”活动,创建对话框。有没有更好的方法来做到这一点?无论我的方法是否正确,我预计由于在 AlarmHardActivity 中没有调用
setContentView(..),因此不会为它呈现 UI。我的理解错了吗?我还尝试调用setContentView(..),然后将布局标记为Theme.NoDisplay和android:alpha="0",但无济于事。
任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: android android-activity android-dialogfragment