有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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


共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

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

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

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

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

    project_structure_settings