如何通过 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;
}
正如标题所说,如果可能的话,我如何通过 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;
}