如何通过 Parcelable 接口将 WifiP2pManager object 发送到另一个 activity

How to send a WifiP2pManager object though a Parcelable interface to another activity

正如标题所说,如果可能的话,我如何通过 Parcelable 接口将 WifiP2pManager 和频道 objects 发送到另一个 activity。

我对 java 和 Android SDK 不是很流利,所以示例代码非常有用。

谢谢。

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

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

然后在 activity 中使用 getApplicationContext() 并将其转换为您的 class 并使用任何 public 函数来获取 WifiP2pManager 和 Channel 对象。

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

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

并按如下方式使用, 呼叫 activity,

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

并在调用 activity、

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

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

创建静态 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;
 }
}

在另一个activity中调用那个静态对象

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