【问题标题】:ResultReceiver from Service to Activity从服务到活动的 ResultReceiver
【发布时间】:2016-06-08 18:28:15
【问题描述】:

我有一个在后台运行的服务,它从一个活动开始,并且在没有活动的情况下完成它的工作。使用 ResultReceiver 我可以与活动通信,但只要活动还活着。一旦 destroid 并重新开始,就没有返回到活动的通信。我做错了什么?

        // Activity
            public void onReceiveResult(int resultCode, Bundle resultData) {
            String test = resultData.getString("Event");
        }
        public MyResultReceiver mReceiver;

        @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      mReceiver = new MyResultReceiver(new Handler());
      mReceiver.setReceiver(this);


        Intent i=new Intent(this, AppService.class);

        i.putExtra(AppService.TIME, spinner_time.getSelectedItemPosition());

        startService(i);


        // Service

        public class AppService extends Service {

          public static final String TIME="TIME";

          int time_loud;

          Notification note;
          Intent i;

          private boolean flag_silencemode = false;


          @Override
          public int onStartCommand(Intent intent, int flags, int startId) {


            time_loud = intent.getIntExtra(TIME, 0);
          resultReceiver = intent.getParcelableExtra(RESULT_RECEIVER);
          resultData = new Bundle();

          resultData.putString("Event", "ysfgsdfgsdfg");
          resultReceiver.send(55, resultData);

            play(time_loud); 

            return(START_NOT_STICKY);
          }


    @SuppressLint("ParcelCreator")
    public class MyResultReceiver extends ResultReceiver {

        private Receiver mReceiver;

        public MyResultReceiver(Handler handler) {
            super(handler);
        }

        public void setReceiver(Receiver receiver) {
            mReceiver = receiver;
        }

        public interface Receiver {
            void onReceiveResult(int resultCode, Bundle resultData);
        }

        @Override
        protected void onReceiveResult(int resultCode, Bundle resultData) {
            if (mReceiver != null) {
                mReceiver.onReceiveResult(resultCode, resultData);
            }
        }
    }

【问题讨论】:

    标签: android android-intent service


    【解决方案1】:

    为简单起见,使用本地广播管理器,并在您的活动 onResume 和 onPause 生命周期中注册和取消注册它

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多