我正在努力将我的应用程序限制为单个实例。目前,如果用户按下主屏幕退出应用程序,然后在外面执行某些操作并再次单击应用程序的图标,则会启动应用程序的第二个实例。
这是我的完整清单文件:
<?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"?
先谢谢。
答案 0 :(得分:37)
我在这个问题上挣扎了2天。添加此属性的修复程序是仅限最近从Cordova 3.5添加到issue CB-6048
添加:
<preference name="AndroidLaunchMode" value="singleTask" />
到config.xml
其他可用值:
答案 1 :(得分:1)
尝试
<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将其设置为应用名称。
答案 2 :(得分: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
<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>
希望能有所帮助。
答案 3 :(得分: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>