【问题标题】:How to send a WifiP2pManager object though a Parcelable interface to another activity如何通过 Parcelable 接口将 WifiP2pManager 对象发送到另一个活动
【发布时间】:2026-02-02 17:25:01
【问题描述】:

正如标题所说,如果可能的话,我如何通过 Parcelable 接口将 WifiP2pManager 和 Channel 对象发送到另一个活动。

我对 java 和 Android SDK 不太熟悉,所以示例代码很有帮助。

谢谢。

【问题讨论】:

  • 向我们展示您已经尝试过的代码。
  • 我没有任何工作代码。我不知道该怎么做。我们知道我们可以通过 intent.putExtra() 发送普通数据类型,但这是 WifiP2pManager,我不知道该怎么做。

标签: android android-intent wifi-direct


【解决方案1】:

如果您确实需要与活动共享 p2p 管理器和频道的实例,我真的建议您考虑更好的方法来完成任务,而不是简单地发送它。

完成它的一种方法是在其他类中实现可用于所有活动的共享部分,例如简单地创建扩展应用程序的新类。在其中实现 WifiP2pManager 和 Channel 处理,将其标记为清单中的应用程序。

然后在活动中使用 getApplicationContext() 并将其转换为您的类并使用任何公共函数来获取 WifiP2pManager 和 Channel 对象。

【讨论】:

    【解决方案2】:

    在发现无法通过 Intent 发送此类对象后,我尝试在我的 Activity 之间共享数据,因此我的 MainHomeActivity 中诞生了静态 SharedData 类。

    public static class SharedData
    {
        private static WifiP2pManager mManager;
        private static WifiP2pManager.Channel mChannel;
    
        static public void set(WifiP2pManager m, WifiP2pManager.Channel c)
        {
            mManager = m;
            mChannel = c;
        }
    
        static public WifiP2pManager getManager()
        {
            return mManager;
        }
    
        static public WifiP2pManager.Channel getChannel()
        {
            return mChannel;
        }
    }
    

    并按如下方式使用, 通话活动,

    Intent intent = new Intent(view.getContext(), Message.class);
    SharedData.set(mManager, mChannel);
    startActivity(intent);
    

    在被调用的活动中,

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //...
        Intent intent = getIntent();
        mManager = new ManetsManager(MainHomeActivity.SharedData.getManager(), MainHomeActivity.SharedData.getChannel());
        //...
    }
    

    我不知道这在多大程度上是正确的,但它在我的情况下有效。 希望这对某些人有所帮助。 感谢您的回答@Dr.Jukka

    【讨论】:

      【解决方案3】:

      创建静态 Wifip2pmanager 对象并初始化管理器

      public class secondActivity extends AppCompatActivity {
      WifiP2pManager mManager;
      WifiP2pManager.Channel mChannel;
      public static WifiP2pManager sharedManager;
      public static WifiP2pManager.Channel sharedChannel;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_second);
      
          mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
          mChannel = mManager.initialize(this, getMainLooper(), null);
          sharedManager=mManager;
          sharedChannel=mChannel;
       }
      }
      

      在另一个活动中调用该静态对象

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_chat);
          WifiP2pManager manager=secondActivity.sharedManager;
          WifiP2pManager.Channel channel=secondActivity.sharedChannel;
        }
      

      【讨论】:

        最近更新 更多