使用参数启动 Android 应用程序 - 快捷方式

lg0*_*173 4 android

我开发了一个读取配置文件的 Android 应用程序。
现在,我想使用另一个文件配置加载我的应用程序。

事实上,我想为我的应用程序创建 2 个快捷方式:

  • myApp 文件路径config1
  • myApp 文件路径config2

是否可以?
如果是,如何获取我的代码中的参数?

感谢您的帮助

Lev*_* M. 5

这在 Android 7.1 Nougat API 级别 25 或更高级别上很容易做到。

有一个专用的快捷方式 API,可让您定义活动的快捷方式,并在特定Intent位置添加额外内容,如下所示:

<intent
    android:action="android.intent.action.LAUNCH_WITH_CONFIG"
    android:targetPackage="com.example.myapplication"
    android:targetClass="com.example.myapplication.ComposeActivity" >

    <extra android:name="configFile" android:value="filepathconfig1" />

</intent>
Run Code Online (Sandbox Code Playgroud)

上面的代码基于此处的示例。

根据评论进行编辑:您还可以按照此处 所述动态添加和删除快捷方式。如果您想以用户身份更改快捷方式而不需要重新编译,您将需要应用程序中的一些 UI 来管理快捷方式。

要访问代码中的额外内容,只需在活动类中执行以下操作:

String configPath = getIntent().getStringExtra("configFile");
Run Code Online (Sandbox Code Playgroud)

然而,如果您需要支持 7.1 之前的 Android 版本,那就会变得更加复杂。

我可以想到两个选项:第一个是使用<activity-alias> ,如此处所述。

但请注意,该问题的作者指出,不能保证它适用于所有设备。

另一种选择是创建两个虚拟启动器活动,它们是不可见的,并且finish()在使用正确的参数启动真正的主活动后立即启动。

在我看来,这是最丑陋的黑客,但也是解决这个问题的最可靠和最普遍的黑客。

在清单中,将活动主题设置为android:theme="@android:style/Theme.Translucent.NoTitleBar"

在此活动中onCreate添加如下代码:

Intent i = new Intent(this, RealMainActivity.class);
i.puStringExtra("configFile", "filepathconfig1");
startActivity(i);
finish();
Run Code Online (Sandbox Code Playgroud)

我从你的评论中看到,你希望它能够动态工作,而不需要重新编译 APK,但 Android 启动器不支持这样的功能。至少,我从未听说过有这样的人。

不过,创建这样的启动器是可能的。

目前使用动态参数启动 Activity 的唯一方法是通过 adb:

adb shell am start com.myactivity --es configFile configFilePath

有关更多详细信息,请阅读此内容