Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android应用程序的两个模块之间传递变量(本地语言)?_Java_Android_Android Module - Fatal编程技术网

Java 如何在Android应用程序的两个模块之间传递变量(本地语言)?

Java 如何在Android应用程序的两个模块之间传递变量(本地语言)?,java,android,android-module,Java,Android,Android Module,我有两个应用程序模块:一个用于配置设置,另一个基于配置设置的游戏。在配置应用程序中,我选择应用程序的语言(变量myLocal),并希望将此变量传递给第二个模块。你知道怎么做吗? 我只需要知道用户是否选择了英语(字符串“en”或波兰语“pl”)。除非一个模块依赖于另一个模块,否则模块无法相互通信。听起来情况并非如此,但您的主应用程序依赖于两者。如果是这样,您应该使用主应用程序在模块之间进行对话: fun applyConfiguration() { val myLocal = module

我有两个应用程序模块:一个用于配置设置,另一个基于配置设置的游戏。在配置应用程序中,我选择应用程序的语言(变量myLocal),并希望将此变量传递给第二个模块。你知道怎么做吗?

我只需要知道用户是否选择了英语(字符串“en”或波兰语“pl”)。

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

fun applyConfiguration() {
    val myLocal = module1.myLocal
    module2.applyLocale(myLocal)
}
当然,这意味着您的主应用程序需要一种方式来通知模块1中所做的更改。这可以通过多种方式实现

编辑 要将一个模块添加为另一个模块的依赖项,请转到“项目结构设置-->依赖项”。单击
声明的依赖项下的
+
按钮。选择模块相关性
,然后选择第二个模块


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

fun applyConfiguration() {
    val myLocal = module1.myLocal
    module2.applyLocale(myLocal)
}
当然,这意味着您的主应用程序需要一种方式来通知模块1中所做的更改。这可以通过多种方式实现

编辑 要将一个模块添加为另一个模块的依赖项,请转到“项目结构设置-->依赖项”。单击
声明的依赖项下的
+
按钮。选择模块相关性
,然后选择第二个模块


我假设这是两个不同的应用程序。如果您是从配置模块启动应用程序,请使用自定义意图,在其中传递语言代码,例如
PackageManager.getLaunchIntentFromPackage(“com.example.mygame”).putExtra(“语言”,语言)
,并从目标模块获取随
getIntent().getStringExtra(“语言”)一起发送的额外“语言”

如果您没有在配置模块内启动应用程序,则可以执行其他操作

在配置应用程序上定义广播接收器

<receiver name=".MyConfigurationReceiver"
    android:enabled="true">
    <intent-filter>
        <action>com.example.configuration.MyCustomAction</action>
    </intent-filter>
</receiver>
在游戏应用程序上也应用相同的过程,定义具有不同操作的接收器:

<receiver name=".MyConfigurationFetcher"
    android:enabled="true">
    <intent-filter>
        <action>com.example.myapp.MyConfigurationFetchAction</action>
    </intent-filter>
</receiver>
这样,您就可以从
.MyConfigurationFetcher
接收器获取配置。然后,您可以在需求中解析配置。这可能需要时间,但最终您会得到它,因为操作有些异步


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

我假设这是两个不同的应用程序。如果您是从配置模块启动应用程序,请使用自定义意图,在其中传递语言代码,例如
PackageManager.getLaunchIntentFromPackage(“com.example.mygame”).putExtra(“语言”,语言)
,并从目标模块获取随
getIntent().getStringExtra(“语言”)一起发送的额外“语言”

如果您没有在配置模块内启动应用程序,则可以执行其他操作

在配置应用程序上定义广播接收器

<receiver name=".MyConfigurationReceiver"
    android:enabled="true">
    <intent-filter>
        <action>com.example.configuration.MyCustomAction</action>
    </intent-filter>
</receiver>
在游戏应用程序上也应用相同的过程,定义具有不同操作的接收器:

<receiver name=".MyConfigurationFetcher"
    android:enabled="true">
    <intent-filter>
        <action>com.example.myapp.MyConfigurationFetchAction</action>
    </intent-filter>
</receiver>
这样,您就可以从
.MyConfigurationFetcher
接收器获取配置。然后,您可以在需求中解析配置。这可能需要时间,但最终您会得到它,因为操作有些异步


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

谢谢,但我应该把代码放在哪里?我只有模块1和模块2,我没有任何其他“主应用程序”连接它们。首先运行module1(配置),然后我可以运行module2(简单游戏)那么,
configuration
是你的主应用程序吗?如果是这样,那么它应该依赖于module2,因此可以直接与它对话。但是如何?我无法从第二个模块导入类。我是新手,在internet上找不到任何提示。我是否使用任何库/方法/结构…?我如何找到我需要的?你需要添加second模块作为第一个模块的依赖项。请参阅我的更新答案。谢谢,但我应该将此代码放在哪里?我只有模块1和模块2,我没有任何其他“主应用程序”连接它们。首先运行模块1(配置),然后我可以运行模块2(简单游戏)那么,
configuration
是你的主应用程序吗?如果是这样,那么它应该依赖于module2,因此可以直接与它对话。但是如何?我无法从第二个模块导入类。我是新手,在internet上找不到任何提示。我是否使用任何库/方法/结构…?我如何找到我需要的?你需要添加second模块作为第一个模块的依赖项。请参阅我的更新答案。它们是应用程序还是模块?如果它们是模块,可能您有一个公共模块,该模块应该是其他模块的基础模块。您可以通过事件总线与您的模块通信。总线的实现应该是公共的,订阅者应该在派生模块中。我不知道..我正在运行appConfig,然后我可以运行appGame。我在这个模块中没有任何其他模块/应用。我认为这些称为模块它们是应用还是模块?如果它们是模块,可能您有一个公共模块,该模块应该是其他模块的基础模块。您可以通过事件总线与模块通信。总线的实现应该是公共模块nd订阅者应该在派生模块中。我不知道..我运行appConfig,然后我就可以运行appGame。我在这一个模块中没有任何其他模块/应用。我以为这些被称为modulesthanks!不幸的是,getLaunchIntentFromPackage返回错误:cannor resolve metod。你知道为什么吗?我应该再做些什么吗?当我说
PackageMa时netger.getLaunchIntentFromPackage()
我的意思是将包管理器本身作为