如何在AndroidManifest.xml中定义launchMode - 使用PhoneGap和JQM

16

我一直在努力让我的应用程序只能运行一个实例。目前,如果用户按下主屏幕退出应用程序,然后执行其他操作并再次点击应用程序的图标,它会启动该应用程序的第二个实例。

这是我的完整清单文件:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.mydomain.qfa"
      android:versionCode="4"
      android:versionName="1.3">


<uses-sdk android:minSdkVersion="7"
          android:targetSdkVersion="13"
          android:maxSdkVersion="18" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<application 
             android:debuggable=["false"]
             android:testOnly=["false"]
             android:icon="@drawable/icon.png"
>
<activity 
            android:name="com.mydomain.qfa"
            android:launchMode=["singleTask"]
            android:alwaysRetainTaskState="true"
            android:icon="@drawable/icon.png"
>
</activity>

</application>
</manifest>

这是一个单一活动的应用程序(基本上没有定义的活动)。在主JQM页面上,我有像这样的条目:

<div data-role="page" id="HomePage">

    <div data-theme="d" data-role="header" data-position="fixed" style="padding-bottom: 0px;" data-tap-toggle="false">

        <div data-role="navbar">                                      

    <div data-role="content"  class="MainContent"  style="overflow:hidden; padding-top: 0px;">
请问我的清单文件是否正确,我应该使用什么?
android:name="com.mydomain.qfa"
或者应该是其他什么,比如说

android:name="com.mydomain.qfa.HomePage"?
或者
android:name="com.mydomain.qfa.MainContent"?

提前致谢。

4个回答

42

我为这个问题苦苦挣扎了两天。解决方案是添加这个属性,而这个功能只在 Cordova 3.5版本以后最近才被加入,详情可以查看 CB-6048

add:

<preference name="AndroidLaunchMode" value="singleTask" />

配置文件为config.xml。

其他可用的值:

  • "standard"(标准模式)
  • "singleTop"(栈顶复用模式)
  • "singleTask"(栈内复用模式)
  • "singleInstance"(单例模式)

1
这看起来是我遇到的问题的完美解决方案,但它没有更新我的Android Manifest.xml文件。我手动添加了android:launchMode="singleTop"并运行了项目,一切都很好,但是使用<preference name="AndroidLaunchMode" value="singleTask" />运行cordova build android会从XML文件中删除实际的launchMode标签。 - Pete
我也曾认为我的 AndroidManifest.xml 没有更新,但事实证明我的 AndroidLaunchMode 被附加到文件末尾(而默认条目出现在文件顶部)。虽然现在文件中有两个条目,但似乎最后一个条目胜出。 - sherb

2
尝试使用。
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:launchMode="singleTop" android:name="HomePage" android:theme="@android:style/Theme.DeviceDefault">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

这是由PhoneGap CLI生成的内容,并将启动模式设置为singleTop以实现单一实例。

android:name必须与活动的主Java类的名称匹配,而不是完整的包名称。默认情况下,PhoneGap将其设置为应用程序名称。


0

试试这个:

<gap:config-file platform="android" parent="/manifest/application">
    <activity android:launchMode="singleInstance" />
</gap:config-file>

但是在您的配置文件的小部件设置中,应该像这样(添加android命名空间定义):

<widget xmlns     = "http://www.w3.org/ns/widgets"
        xmlns:gap = "http://phonegap.com/ns/1.0"
        xmlns:android = "http://schemas.android.com/apk/res/android"
        id        = "com.wildabeast.app"
        version   = "1.0.0">
....
</widget>

0

这是最终对我有效的方法:

然而诀窍在于需要在两个位置进行更改

A)MyAppFolder\platforms\android\AndroidManifest.xml

<activity android:alwaysRetainTaskState="true" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:launchMode="singleTask" android:name="AppName" android:theme="@android:style/Theme.Black.NoTitleBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

B) MyAppFolder\www\AndroidManifest.xml

B) MyApp文件夹\www\AndroidManifest.xml

<activity
            android:name="AppName"
            android:launchMode=["singleTask"]
            android:alwaysRetainTaskState="true"
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

希望能对某人有所帮助。

真的吗?下一个版本发布后再检查。最后一刻不能冒险尝试。无论如何,感谢您的建议。 - AnR
遇到了同样的问题...不过,在我的PhoneGap应用中,我也没有看到www/androidmanifest.xml。 - ericpeters0n
@Anjum,你能再检查一下吗? - ericpeters0n
我的理解是,当你创建一个PhoneGap项目时,默认会创建AndroidManifest.xml文件。但如果没有的话,只需创建一个即可。下面@QuickFix提供的解决方案对我很有帮助。 - AnR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接