通过IntentService显示对话框?

时间:2017-02-04 16:59:06

标签: android service dialog android-alertdialog intentservice

我有一个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);

1 个答案:

答案 0 :(得分:1)

  

我可以以某种方式将AppCompatActivity传递给IntentService吗?

没有

  

我可以以某种方式将IntentService与AppCompat相关联吗?

没有

  

我有什么选择?

创建以对话为主题的活动,并从您的服务中启动该活动。

或者,让服务在事件总线上发布消息,说明程序已经完成。如果您碰巧在前台有活动,它可以获取事件总线消息并显示对话框。如果您在前台没有活动,您的服务可以找到并执行其他操作(例如,显示Notification),以免中断用户。