我应该如何在 AndroidManifest.xml 中定义 launchMode - 使用 PhoneGap 和 JQM
Posted
技术标签:
【中文标题】我应该如何在 AndroidManifest.xml 中定义 launchMode - 使用 PhoneGap 和 JQM【英文标题】:How should I define launchMode in AndroidManifest.xml - Using PhoneGap & JQM 【发布时间】:2014-03-11 23:55:15 【问题描述】:我正在努力将我的应用程序限制为单个实例。目前,如果用户按下主屏幕退出应用程序,然后在外面做一些事情并再次点击应用程序的图标,它会启动应用程序的第二个实例。
这是我的完整清单文件:
<?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;">
谁能告诉我我的 Manifest 是否正确以及我是否应该使用
android:name="com.mydomain.qfa"
或者应该是其他类似的东西
android:name="com.mydomain.qfa.HomePage"?
或
android:name="com.mydomain.qfa.MainContent"?
提前致谢。
【问题讨论】:
【参考方案1】:我为这个问题苦苦挣扎了 2 天。添加此属性的修复最近从 3.5 开始添加到 Cordova,issue CB-6048
添加:
<preference name="AndroidLaunchMode" value="singleTask" />
到 config.xml
其他可用值:
“标准” “单顶” “单一任务” “单一实例”【讨论】:
这看起来是我遇到的问题的完美解决方案,但它不会更新我的 Android Manifest.xml。我已经手动添加了android:launchMode="singleTop"
并运行该项目,一切都很好,但是使用<preference name="AndroidLaunchMode" value="singleTask" />
运行cordova build android
会从XML 文件中删除实际的launchMode
标记
我也以为我的AndroidManifest.xml
没有更新,但结果我的AndroidLaunchMode
被附加到文件末尾(而默认条目出现在文件顶部) .尽管文件中现在有两个条目,但似乎最后一个条目获胜。【参考方案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 必须匹配 Activity 的主 java 类的名称,而不是完整的包名。默认 phonegap 将其设置为应用名称。
【讨论】:
【参考方案3】:这最终对我有用:
但是诀窍是您需要在两个位置进行更改:
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>
希望对某人有所帮助。
【讨论】:
真的吗?下次发布后会检查。不能在最后一刻进行实验。无论如何,谢谢你的观点。 面临同样的问题......但是,我的 phonegap 应用程序中也没有看到 www/androidmanifest.xml。 @Anjum 你能仔细检查一下吗? 我的理解是AndroidManifest.xml是在创建PhoneGap项目时默认创建的。但如果那不存在,就创造一个。 @QuickFix 下面的解决方案对我有用。【参考方案4】:试试这个:
<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>
【讨论】:
以上是关于我应该如何在 AndroidManifest.xml 中定义 launchMode - 使用 PhoneGap 和 JQM的主要内容,如果未能解决你的问题,请参考以下文章
为 Lollipop 使用 Android SDK 18 (Jelly Bean)
从 Eclipse 导入项目到 Android Studio
va.io.FileNotFoundException: /storage/emulated/0/xxx/xxx/加密: open failed: EACCES (Permission denied)