从应用程序外部更改应用程序配置:

时间:2013-11-19 12:57:33

标签: java android configuration application-settings

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

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

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

有没有办法做那样的事情? 如果是这样,怎么办呢? 我应该为此制作一个全新的申请吗?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以在SharedPreferences中设置此选项,并为开发团队创建一个活动,使用清单中的LAUNCHER选项进行设置,这样它就会有一个启动图标。

您可以执行的操作是将其从发布版本的清单中删除。

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

答案 1 :(得分:-1)

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

android custom url scheme..?

代码是,在主Activity的Manifest文件中我提供了以下intent-filter:

  <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");
    }

最后,要使用此intent过滤器启动应用程序,您需要使用以下代码创建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>