繁体   English   中英

将值从broadcastreceiver类传递给wifi direct中的主要活动

[英]Pass a value from broadcastreceiver class to main activity in wifi direct

我想将WiFiDirectBroadcastReceiver中的字符串变量result中的值发送到WiFiDirectActivity ,我尝试这样做,如下所示

但是当我运行该应用程序时,它一直在寻找同伴。 当我评论这些添加的行(WiFiDirectBroadcastReceiver的最后3行)时,它可以正常工作。

添加了WiFiDirectBroadcastReceiver中onReceive函数的代码以及WiFiDirectActivity中的upResume ()

如何将该值传递给WiFiDirectActivity? 我在这里想念什么?

WiFiDirectBroadcastReceiver.java

public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();

      //if (MyIntentService.ACTION_MyIntentService.equals(action))
     // {
        //result = intent.getStringExtra(MyIntentService.EXTRA_KEY_OUT);
          result = "hello";
      //}

    if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {

        // UI update to indicate wifi p2p status.
        int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
        if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
            // Wifi Direct mode is enabled
            activity.setIsWifiP2pEnabled(true);
        } else {
            activity.setIsWifiP2pEnabled(false);
            activity.resetData();

        }
        Log.d(WiFiDirectActivity.TAG, "P2P state changed - " + state);
    } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {

        // request available peers from the wifi p2p manager. This is an
        // asynchronous call and the calling activity is notified with a
        // callback on PeerListListener.onPeersAvailable()
        if (manager != null) {
            manager.requestPeers(channel, (PeerListListener) activity.getFragmentManager()
                    .findFragmentById(R.id.frag_list));
        }
        Log.d(WiFiDirectActivity.TAG, "P2P peers changed");
    } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {

        if (manager == null) {
            return;
        }

        NetworkInfo networkInfo = (NetworkInfo) intent
                .getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);

        if (networkInfo.isConnected()) {

            // we are connected with the other device, request connection
            // info to find group owner IP

            DeviceDetailFragment fragment = (DeviceDetailFragment) activity
                    .getFragmentManager().findFragmentById(R.id.frag_detail);
            manager.requestConnectionInfo(channel, fragment);
            //fragment.peerCountInfo=result;
            //fragment.peerCt = peerCountFromDlist;
            //fragment.peerNm = peerNameFromDlist;
        } else {
            // It's a disconnect
            activity.resetData();
        }
    } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
        DeviceListFragment fragment = (DeviceListFragment) activity.getFragmentManager()
                .findFragmentById(R.id.frag_list);
        fragment.updateThisDevice((WifiP2pDevice) intent.getParcelableExtra(
                WifiP2pManager.EXTRA_WIFI_P2P_DEVICE));
        //peerCountFromDlist = fragment.peerTot;
        //peerNameFromDlist = fragment.deviceid;

    }

    intent.putExtra("message",result);
    intent.setClass(context, WiFiDirectActivity.class);
    context.startActivity(intent);
}

WiFiDirectActivity.java

public class WiFiDirectActivity extends Activity implements ChannelListener, DeviceActionListener {

public static final String TAG = "wifidirectdemo"; private WifiP2pManager manager; private boolean isWifiP2pEnabled = false; private boolean retryChannel = false; private final IntentFilter intentFilter = new IntentFilter(); private Channel channel; private BroadcastReceiver receiver = null; private String resultString; private int peerCount; /** * @param isWifiP2pEnabled the isWifiP2pEnabled to set */ public void setIsWifiP2pEnabled(boolean isWifiP2pEnabled) { this.isWifiP2pEnabled = isWifiP2pEnabled; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // add necessary intent values to be matched. intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION); intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION); intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION); intentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION); intentFilter.addAction(MyIntentService.ACTION_MyIntentService); manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); channel = manager.initialize(this, getMainLooper(), null); } /** register the BroadcastReceiver with the intent values to be matched */ @Override public void onResume() { super.onResume(); receiver = new WiFiDirectBroadcastReceiver(manager, channel, this); registerReceiver(receiver, intentFilter); Bundle extras = getIntent().getExtras(); if (extras != null) { resultString = extras.getString("message"); } }

多亏了Mike M,我发现了一种从BroadcastReceiver向Main Activity发送一些数据的简单方法。( setIsWifiP2pEnabled(boolean isWifiP2pEnabled)方法的工作方式与此相同)

发送"message"并将其检索到str变量;

在MainActivity中创建一个公共方法:

   public void setResult(String result){
          str = result;
}

然后在BroadcastReceiver中调用它:

activity.setResult("message");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM