2014-11-24 123 views
0

我有三个活动
对活性产生我注册的广播接收器,然后我去活动B,从那里我去活动C.
最后onBackPressed活动的C,我发送广播 但onReceive不叫广播接收器“接收”方法没有被调用?

我的第一个活动

private MyBroadCastReceiver myRecevier = new MyBroadCastReceiver(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Submit.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       Intent frag=new Intent(MainActivity.this,Activity2.class); 
       //frag.putExtra("Limit", foo); 
       startActivity(frag); 
       // } 
      } 
     }); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     //Register the activity to the broadcast receiver 
     registerReceiver(myRecevier, new IntentFilter(MyBroadCastReceiver.ACTION)); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     //Unregister the activity from the broadcast receiver. Good practice ;) 
     unregisterReceiver(myRecevier); 
    } 

    public class MyBroadCastReceiver extends BroadcastReceiver{ 

     public static final String ACTION = "com.uberrueco.mybroadcastreceiver.receivers"; 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.d("MyBroadCastReceiver", "received"); 
      Toast.makeText(context,"Received "+intent.getStringExtra("editText"), Toast.LENGTH_LONG).show(); 

     } 
    } 
} 

次活动没有任何关系,但打算向活动3

第三幕ivity

public class Activity3 extends Activity { 
    EditText etReceivedBroadcast; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity3); 
     etReceivedBroadcast = (EditText) findViewById(R.id.etReceivedBroadcast); 
    } 
    @Override 
    public void onBackPressed() { 
     // TODO Auto-generated method stub 
     super.onBackPressed(); 
     Intent intent = new Intent(this, MyIntentService.class); 
     intent.putExtra("editText", etReceivedBroadcast.getText().toString()); 
     startService(intent); 
    } 
} 

最后我IntentService

public class MyIntentService extends IntentService{ 

    public MyIntentService(){ 
     super("MyIntentService"); 
    } 

    public MyIntentService(String name) { 
     super(name); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 

     Log.d("MyIntentService", "handling intent..."); 

     //Intent created for broadcasting 
     Intent intentBroadCast = new Intent(); 

     //Filter the broadcast to the action desired 
     intentBroadCast.setAction(MyBroadCastReceiver.ACTION); 
     intentBroadCast.putExtra("editText", intent.getStringExtra("editText")); 
     //Send the broadcast :D 
     sendBroadcast(intentBroadCast); 
    } 
} 
+0

你试过,你onHandleIntent()服务方法被调用的变化?得到日志? – 2014-11-24 06:48:01

回答

3

您在MainActivity的onPause调用unregisterReceiver。所以你没有收到广播。

将注册表移动到onCreate并取消注册到您的MainActivity的onDestroy

+0

哦,我犯了这样一个愚蠢的错误 谢谢@ nandeesh ...它工作正常 – 2014-11-24 10:30:23

0

如果你的onHandleIntent()被调用,那么你应该尝试像。

Intent intentBroadCast = new Intent(MyBroadCastReceiver.ACTION); 

    intentBroadCast.putExtra("editText", intent.getStringExtra("editText")); 
    //Send the broadcast :D 
    sendBroadcast(intentBroadCast); 
0

使像下面的代码

private MyBroadCastReceiver myRecevier = new MyBroadCastReceiver(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //Register the activity to the broadcast receiver 
    this.registerReceiver(myRecevier, new IntentFilter(MyBroadCastReceiver.ACTION)); 

    Submit.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      Intent frag=new Intent(MainActivity.this,Activity2.class); 
      //frag.putExtra("Limit", foo); 
      startActivity(frag); 
      // } 
     } 
    }); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 


} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    //Unregister the activity from the broadcast receiver. Good practice ;) 
    this.unregisterReceiver(myRecevier); 
} 
@Override 
protected void onPause() { 
    super.onPause(); 
    //Unregister the activity from the broadcast receiver. Good practice ;) 
    unregisterReceiver(myRecevier); 
} 



public class MyBroadCastReceiver extends BroadcastReceiver{ 

    public static final String ACTION = "com.uberrueco.mybroadcastreceiver.receivers"; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("MyBroadCastReceiver", "received"); 
     Toast.makeText(context,"Received "+intent.getStringExtra("editText"), Toast.LENGTH_LONG).show(); 

    } 
} 
} 

ü需要使用这样this.unregisterReceiver()this.registerReceiver()