从服务中显示当前活动的吐司

时间:2012-10-04 15:29:13

标签: service toast android

如果对服务进行了一些更新,我需要在当前活动中显示Toast。所以服务呼叫服务器,如果它是一些更新,我需要证明用户永远不知道他在哪个活动。我试着像这样实现它:

 Toast.makeText(ApplicationMemory.getInstance(), "Your order "+progress+"was updated", 
                     Toast.LENGTH_LONG).show();

其中

public class ApplicationMemory extends Application{
static ApplicationMemory instance;

   public static ApplicationMemory getInstance(){
        return instance;
    }
}

它不起作用。我还试图用

获取当前的活动名称
ActivityManager am = (ActivityManager) ServiceMessages.this.getSystemService(ACTIVITY_SERVICE);
List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1);
ComponentName  componentInfo = taskInfo.get(0).topActivity;
componentInfo.getPackageName();
Log.d("topActivity", "CURRENT Activity ::"  + componentInfo.getClassName());

但是不知道如何从ComponentName获取上下文对象。

1 个答案:

答案 0 :(得分:12)


尝试使用处理程序。关于Toasts,你必须在UI线程上运行makeText,服务不在其上运行。 Handler允许您发布要在UI线程上运行的runnable。在这种情况下,您将在onStartCommand方法中初始化Handler。

private Handler mHandler;

@Override
onStartCommand(...) {
  mHandler = new Handler();
}

private class ToastRunnable implements Runnable {
    String mText;

    public ToastRunnable(String text) {
        mText = text;
    }

    @Override
    public void run(){
         Toast.makeText(getApplicationContext(), mText, Toast.LENGTH_SHORT).show();
    }
}


private void someMethod() {
    mHandler.post(new ToastRunnable(<putTextHere>);
}