2016-06-08 94 views
1

我有一个服务在后台运行,从一个活动开始,没有活动就开始工作。使用ResultReceiver,我可以与活动进行通信,但只要活动处于活动状态即可。一旦下降并重新开始,就没有任何通信返回到活动。我错了什么?ResultReceiver从服务到活动

 // 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); 
      } 
     } 
    } 

回答

1

为简单起见,使用本地广播经理,注册并在活动注销它的onResume,在onPause生命周期

+0

非常感谢它的工作。我像这样实现它:http://stackoverflow.com/questions/8802157/how-to-use-localbroadcastmanager – user1390816