我有一个IntentService,我试图在一些程序完成后显示带有消息的Dialog。
我可以通过
显示Toast handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(ServiceName.this, message, Toast.LENGTH_LONG);
}
});
但我希望显示一个Dialog,因为它可以显示更多文本,看起来更干净,我正在尝试做什么。但是当我尝试:
handler.post(new Runnable() {
@Override
public void run() {
new AlertDialog.Builder(ServiceName.this)
.setTitle("Title")
.setMessage(message)
.create().show();
}
});
它会抛出错误:
java.lang.IllegalStateException:您需要使用Theme.AppCompat 这个活动的主题(或后代)。
我不想摆弄我的Manifest,因为这可能会影响应用程序中的其他所有内容,但有什么方法可以解决这个问题吗?我可以以某种方式将AppCompatActivity传递给IntentService吗?我可以以某种方式将IntentService与AppCompat相关联吗?我有什么选择?
编辑:尝试使用Dialog Activity方法:
Intent intent = new Intent(ServiceName.this, ActivityWithDialogTheme.class);
intent.putExtra(ActivityWithDialogTheme.MESSAGE, message);
startActivity(intent);
答案 0 :(得分:1)
我可以以某种方式将AppCompatActivity传递给IntentService吗?
没有
我可以以某种方式将IntentService与AppCompat相关联吗?
没有
我有什么选择?
创建以对话为主题的活动,并从您的服务中启动该活动。
或者,让服务在事件总线上发布消息,说明程序已经完成。如果您碰巧在前台有活动,它可以获取事件总线消息并显示对话框。如果您在前台没有活动,您的服务可以找到并执行其他操作(例如,显示Notification
),以免中断用户。