如何通过 Parcelable 接口将 WifiP2pManager 对象发送到另一个活动
Posted
技术标签:
【中文标题】如何通过 Parcelable 接口将 WifiP2pManager 对象发送到另一个活动【英文标题】:How to send a WifiP2pManager object though a Parcelable interface to another activity 【发布时间】:2015-05-31 07:36:29 【问题描述】:正如标题所说,如果可能的话,我如何通过 Parcelable 接口将 WifiP2pManager 和 Channel 对象发送到另一个活动。
我对 java 和 android SDK 不太熟悉,所以示例代码很有帮助。
谢谢。
【问题讨论】:
向我们展示您已经尝试过的代码。 我没有任何工作代码。我不知道该怎么做。我们知道我们可以通过 intent.putExtra() 发送普通数据类型,但这是 WifiP2pManager,我不知道该怎么做。 【参考方案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;
【讨论】:
以上是关于如何通过 Parcelable 接口将 WifiP2pManager 对象发送到另一个活动的主要内容,如果未能解决你的问题,请参考以下文章
Android :安卓学习笔记之 通过Intent传递类对象(实现Serializable和Parcelable接口)
Android:使用Parcelable接口在跳转Activity时传递数据以及错误信息 Parcel: unable to marshal value 的解决