1

我有两个应用程序模块:一个用于配置设置,第二个是基于配置设置的游戏。在配置应用程序中,我选择应用程序的语言(变量 myLocal)并希望将此变量传递给第二个模块。你知道怎么做吗?
我只需要知道用户是否选择了英语(字符串“en”或波兰语“pl”)。

4

3 回答 3

0

除非一个模块依赖另一个模块,否则模块不能相互通信。听起来情况并非如此,但您的主应用程序依赖于两者。如果是这样,您应该使用主应用程序在模块之间进行对话:

fun applyConfiguration() {
    val myLocal = module1.myLocal
    module2.applyLocale(myLocal)
}

当然,这意味着您的主应用程序需要一种方式来通知模块 1 中所做的更改。这可以通过多种方式实现。

编辑 要将一个模块添加为另一个模块的依赖项,请转到项目结构设置-->依赖项。单击+下的按钮Declared Dependencies。选择Module Dependency并选择您的第二个模块。

项目结构设置

于 2019-11-15T14:03:19.973 回答
0

如果使用导航组件,您可以执行类似的操作将参数传递给另一个模块。

 val bundle = bundleOf("LOCAL_LANGUAGE" to language)
 findNavController().navigate(R.id.module2_navigation, bundle)

在这里,我使用 Kotlin 的to函数来进行左右配对。您可以参考这里以获取有关使用 bundle 传递数据的更多信息。

笔记:

Safe Args不支持跨模块导航,因为没有直接到目的地的操作

于 2022-01-13T21:37:23.483 回答
0

我假设这是两个不同的应用程序。如果您从配置模块启动应用程序,请使用自定义意图,您可以在其中传递语言代码,例如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接收器获取配置。然后,您可以根据您的要求解析配置。这可能需要一些时间,但最终你会得到它,因为操作有点异步。

这只是一个例子,但我想你明白了。

于 2019-11-15T14:26:59.803 回答