android服务和“警报窗口”

时间:2012-01-13 00:31:57

标签: java android service

我希望在我的应用程序的后台使用服务。当在服务中达到一些特殊的地方时,我希望将其停止并显示给用户通知,直到他或她点击" OK" (某种警报窗口)。当他或她点击" OK" - >我希望将服务中的一些数据传递给我的Activity。

我可以请求帮助。我的服务已经运行良好,我希望使用Alert Dialog - 但不知道如何从服务中调用它。

2 个答案:

答案 0 :(得分:1)

作为official documentation states后台服务永远不应自行启动活动以接收用户互动。 相反,您应该向通知栏发送通知。通知可以被标记为持久并且振动直到用户采取行动,这与在用户点击按钮之前不解除弹出一样强烈。请按照上面的链接获取关于通知的好(和官方)教程

如果你真的想要发布一个活动(并弹出一个对话框),你必须首先将以下标志设置为你的意图,否则你会得到一个例外。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

答案 1 :(得分:0)

一旦达到服务中的某个点,就启动一个活动,不要使用setContent视图,只需在onCreate()中使用它来显示警告对话框。

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("ALERT")
   .setCancelable(false)
   .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int id) {
            MyActivity.this.finish();
       }
   })
   .setNegativeButton("No", new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
       }
   });
AlertDialog alert = builder.create();

当用户按下okay时,对话框将以活动结束。

编辑:

对于您要发送到活动的数据,只需将其放入启动活动的包中。

Intent intent = new Intent(this, SecondActivity.class);
Bundle b = new Bundle();

// see Bundle.putInt, etc.
// Bundle.putSerializable for full Objects (careful there)

 b.putXXXXX("key", ITEM);  
intent.putExtras(b);
startActivity(intent);

// -- later, in Activity
Bundle b = this.getIntent().getExtras();
int i = b.getInt("key");