【问题标题】:Chnage application configuration from outside the application:从应用程序外部更改应用程序配置:
【发布时间】:2013-11-19 12:57:33
【问题描述】:

我想更改连接服务器的应用程序配置,我有两个选项: 测试,生产。这是使用我的一个 Helper 类中的静态字符串设置的。

现在我想使用系统中的另一个图标从应用程序外部进行此更改。 这样做的原因是我不希望用户能够这样做(而且我不希望它成为我的应用程序的一部分)。只有必须在现场检查应用程序的开发团队才能添加此图标并进行此更改。

所以我不想创建某种将与我的应用程序一起安装的小部件。

有没有办法做这样的事情? 如果是这样,如何做到这一点? 我应该为此重新申请吗?

谢谢。

【问题讨论】:

    标签: java android configuration application-settings


    【解决方案1】:

    您可以在SharedPreferences 中设置此选项并创建一个活动供开发团队设置它,在清单中使用 LAUNCHER 选项,因此它会有一个启动图标。

    您可以对用户隐藏它的方法是从发布版本的清单中删除此活动。

    如果您使用的是 Android Studio / Gradle,您可以为不同的构建类型使用不同的 AndroidManifest.xml,请参阅How to tell Gradle to use a different AndroidManifest from the command line?

    【讨论】:

    • 如果我在 Manifest 文件中使用 LAUNCHER 意图过滤器创建两个活动,它将创建两个启动图标,每个图标都指向同一应用程序的指定活动?
    • 是的,它会的。 Android 为每个 LAUNCHER 类别的活动创建一个图标。在此处阅读更多信息 - developer.android.com/guide/components/intents-filters.html
    【解决方案2】:

    我最终使用了Url Scheme,对于此任务,可以在此处找到更多信息:

    android custom url scheme..?

    代码是,在我的主 Activity 的清单文件中,我提供了以下意图过滤器:

      <intent-filter>
         <action android:name="android.intent.action.VIEW" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.BROWSABLE" />
         <data android:scheme="myapp" android:host="com.myhost" />
      </intent-filter>
    

    在活动中我会这样做:

        Intent intent = getIntent();
        String value = null;
        if (intent.getData() != null)
        {
            value = intent.getData().getQueryParameter("server"); 
        }
        if (value != null)
        {
            Log.d(TAG, "with scheme value: "+ value);
            if (value.equals("my_test_server_address"))
            {
                Toast.makeText(this, "Server set to Test" , Toast.LENGTH_LONG).show();
            }
            else if (value.equals("my_production_server_address"))
            {
                Toast.makeText(this, "Server set to Production" , Toast.LENGTH_LONG).show();
            }
            else
            {   
                Toast.makeText(this, "Server set to Address: "+ value , Toast.LENGTH_LONG).show();
            }
            Consts.BASE_URL = Uri.parse(value);
        }
        else
        {
            Log.d(TAG, "value was null");
        }
    

    最后,要使用此意图过滤器启动您的应用程序,您需要创建一个 HTML 文件,其中包含以下代码:

    <a href="myapp://com.myhost?server=my_test_server_address">test</a>
    <a href="myapp://com.myhost?server=my_production_server_address">production</a>
    

    【讨论】:

    • 您询问了向启动器添加额外图标并得到了答案,请将其标记为已接受,而不是标记您自己没有回答问题的答案
    • @GalBen-Haim,我问:“从应用程序外部更改应用程序配置”,我还指出:“我不希望它成为我应用程序的一部分”。 ..您的解决方案可能适用于我的问题,但我必须一直维护它....另一方面,使用 URL 方案,我刚刚在我的一个桌面上添加了一个网页的快捷方式,效果很好。所以实际上这比你提出的问题更好。现在,请删除反对票,没有必要生气。
    猜你喜欢
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2015-05-20
    • 2021-12-16
    • 2016-03-30
    • 1970-01-01
    相关资源
    最近更新 更多