【问题标题】:Custom intent not received未收到自定义意图
【发布时间】:2013-05-07 14:34:47
【问题描述】:

我有两个活动,A 和 B。活动 A 使用广播接收器捕获意图,活动 B 触发它。

活动 A 代码:

final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {

            String action = intent.getAction();         

            if(action.equals(floatyNetworkList.CONNECT_INTENT)){
                Log.v("com.vittorio", "intent catched");
                BluetoothDevice target = (BluetoothDevice) intent.getExtras().get("Device");
                Thread T = new Thread(new ConnectThread(target, mHandler, recmsgs, DDB, "Connecting"));
                T.start();
            }
..
..

在活动 A 中,我还使用以下代码注册接收器:

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
filter.addAction(floatyNetworkList.CONNECT_INTENT);
registerReceiver(mReceiver, filter);

活动 B 的代码,当我从列表视图中选择一个项目时,我的意图被触发:

listBtview.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> adapterBt, View myView, int myItemInt, long mylng) {

        @SuppressWarnings("unchecked")
        HashMap<String,String> selectedFromList =(HashMap<String,String>) (listBtview.getItemAtPosition(myItemInt));
        Toast.makeText(getBaseContext(), selectedFromList.get("Name"), Toast.LENGTH_LONG).show();

        Intent intent = new Intent(getApplicationContext(), Floaty.class);
        intent.setAction(CONNECT_INTENT);
        intent.putExtra("Device",fetchDevice(selectedFromList.get("Address")));
        getApplicationContext().sendBroadcast(intent);
      }                  
});

}

问题是活动 A 永远不会收到意图。我还为我的自定义意图添加了过滤器并正确更新了我的清单。

清单代码:

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <action android:name="com.vittorio.intent.action.CONNECT_INTENT"/>
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

有什么想法吗?

谢谢

【问题讨论】:

  • 你注册你的接收器了吗?
  • 你能告诉我们广播接收器注册的代码或声明它的清单
  • 你也可以发布你的清单吗?
  • 我在注册接收器的地方添加了清单和代码
  • 为什么要使用 getApplicationContext() 和 getBaseContext()?

标签: android android-intent broadcastreceiver


【解决方案1】:

像这样创建意图:

Intent intent = new Intent();
intent.setAction(CONNECT_INTENT);

intent = new Intent(CONNECT_INTENT);

而且,是的,不要使用应用程序上下文,在这个网站上查看很多关于它的帖子

【讨论】:

  • 好的,现在可以了,但我只是将意图更改为Intent intent = new Intent(); 而不修改上下文:)。
  • 好的,我同意它有效,但请阅读 rhis:stackoverflow.com/questions/7298731/…
  • 非常感谢您的分享,现在我根据您的回复更改了代码:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多