我的搜索没有返回答案,而是一两个未回答的问题。我会尝试以一种也许我能得到答案的方式来表达它。
TL;DR 版本:
我无法弄清楚我们如何从 AndroidViewModel 类启动(VPN)服务。
更长的版本:
通常,我会从一个活动中启动这样的服务:
@Override
public void onClick(View v) {
Intent intent = VpnService.prepare(this);
if (intent != null) {
startActivityForResult(intent, 0);
} else {
onActivityResult(0, RESULT_OK, null);
}
}
显然,在 MVVM 中,我想将点击事件传递给 AndroidViewModel(或者只是 ViewModel,但我需要 Context,所以它必须是 AndroidViewModel),并且我想在那里启动服务。
我应该这样做吗?看起来很乱。
public void startStopButtonWasClicked(WeakReference<Activity> MainActivity) {
//do other stuff
Intent intent = VpnService.prepare(MainActivity.get());
if (intent != null) {
application.startActivity (intent, 0);
MainActivity.get().startActivityForResult(intent, 0);
} else {
MainActivity.get().onActivityResult(0, RESULT_OK, null);
}
}
或者我应该在 VM 类中实现 onActivityResult 吗?
编辑:这甚至是不可能的:MainActivity.get().onActivityResult(0, RESULT_OK, null);