我有两个应用程序模块:一个用于配置设置,第二个是基于配置设置的游戏。在配置应用程序中,我选择应用程序的语言(变量 myLocal)并希望将此变量传递给第二个模块。你知道怎么做吗?
我只需要知道用户是否选择了英语(字符串“en”或波兰语“pl”)。
3 回答
除非一个模块依赖另一个模块,否则模块不能相互通信。听起来情况并非如此,但您的主应用程序依赖于两者。如果是这样,您应该使用主应用程序在模块之间进行对话:
fun applyConfiguration() {
val myLocal = module1.myLocal
module2.applyLocale(myLocal)
}
当然,这意味着您的主应用程序需要一种方式来通知模块 1 中所做的更改。这可以通过多种方式实现。
编辑
要将一个模块添加为另一个模块的依赖项,请转到项目结构设置-->依赖项。单击+
下的按钮Declared Dependencies
。选择Module Dependency
并选择您的第二个模块。
我假设这是两个不同的应用程序。如果您从配置模块启动应用程序,请使用自定义意图,您可以在其中传递语言代码,例如PackageManager.getLaunchIntentFromPackage("com.example.mygame").putExtra("language", language)
从目标模块获取您发送的“语言”额外内容getIntent().getStringExtra("language")
。
如果您没有在配置模块中启动应用程序,那么您还可以执行其他操作。
在您的配置应用程序上定义广播接收器。
<receiver name=".MyConfigurationReceiver"
android:enabled="true">
<intent-filter>
<action>com.example.configuration.MyCustomAction</action>
</intent-filter>
</receiver>
然后,一旦你打开游戏(你的游戏模块),向这个动作发送一个广播,它会从你的配置模块接收到这样的东西:
getApplicationContext().sendBroadcast(new Intent(
"com.example.configuration.MyCustomAction"));
在您的游戏应用程序上也应用相同的过程,定义具有不同操作的接收器:
<receiver name=".MyConfigurationFetcher"
android:enabled="true">
<intent-filter>
<action>com.example.myapp.MyConfigurationFetchAction</action>
</intent-filter>
</receiver>
从第一个代码接收到广播后.MyConfigurationReceiver
,从模块中获取配置并将广播发送回游戏。注意:这是来自配置模块。示例代码:
@Override
public void onReceive(Context context, Intent intent)
{
context.getApplicationContext().sendBroadcast(
new Intent("com.example.myapp.MyConfigurationFetchAction")
.putExtra("myConfiguration", Utilities.getConfiguration()))
}
这样,您可以从.MyConfigurationFetcher
接收器获取配置。然后,您可以根据您的要求解析配置。这可能需要一些时间,但最终你会得到它,因为操作有点异步。
这只是一个例子,但我想你明白了。