2

サービスが更新された場合は、現在のアクティビティでトーストを表示する必要があります。したがって、サービスコールサーバーとそれが更新である場合は、ユーザーがどのアクティビティであるかを気にしないことをユーザーに通知する必要があります。私はそれを次のように実装しようとします:

 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からコンテキストオブジェクトを取得する方法がわかりません。

4

1 に答える 1

12

Handler を使用してみてください。Toasts に関することは、Service が実行されない 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>);
}
于 2012-10-04T16:04:16.200 に答える