【问题标题】:Titanium Android activity not maintaining stateTitanium Android活动不保持状态
【发布时间】:2014-05-20 18:18:40
【问题描述】:

我正在尝试设置一个移动网站,当在 Android 浏览器中单击链接时,该网站会打开我的移动应用程序。为了完成这项任务,我在 AndroidManifest.xml 中添加了一个意图过滤器,如下面的代码所示:

<activity android:name=".MyAppActivity" android:label="@string/app_name" android:theme="@style/Theme.Titanium" android:configChanges="keyboardHidden|orientation" android:alwaysRetainTaskState="true" android:launchMode="singleInstance">
<intent-filter>
<data android:scheme="myapp" android:host="app"/>
<action android:name="android.intent.action.MAIN"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>

浏览器中的链接本身运行良好,当应用程序首次使用 Ti.Android.currentActivity 打开时,我可以轻松收集参数。当应用程序已经打开,但用户单击链接从移动浏览器中打开它时,问题就出现了。当我的应用程序打开时,我不会从之前中断的地方继续,而是看到启动画面。这是双向的:如果我先从移动浏览器打开应用程序,然后尝试稍后从 Android 主屏幕或应用程序抽屉恢复它,我只会看到启动画面。根据我在互联网其他地方看到的提示,我尝试将以下代码添加到 AndroidManifest.xml(如上所示):

android:alwaysRetainTaskState="true" android:launchMode="singleInstance"

但是,这似乎对任何事情都没有影响,并且同样的问题仍然存在。我在这里想念什么? 非常感谢任何帮助。

【问题讨论】:

    标签: android android-intent android-activity titanium intentfilter


    【解决方案1】:

    我的做法是这样的

    <android xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="18"/>
        <manifest android:installLocation="preferExternal"
            android:versionCode="1" android:versionName="1.0">
            <uses-permission android:name="android.permission.CALL_PHONE"/>
            <application android:label="App Name" android:largeHeap="true">
                <activity
                    android:configChanges="keyboardHidden|orientation|screenSize"
                    android:label="@string/app_name"
                    android:launchMode="singleTop"
                    android:name=".mainActivity" android:theme="@style/Theme.Titanium">
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN"/>
                        <category android:name="android.intent.category.LAUNCHER"/>
                    </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="schemaname"/>
                    </intent-filter>
                </activity>
            </application>
        </manifest>
    </android>
    

    它对我来说很好用。适用于 Android 4.XX

    【讨论】:

    • 这是正确的做法。这里只是一个额外的说明:为了从链接打开你的应用程序,你需要定义一个方案来告诉 Android 你的应用程序能够处理什么样的链接。另外,请注意launchMode="singleTop",不要添加android:alwaysRetainTaskState。如果你愿意,你也可以看看我的(旧的)例子here
    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    相关资源
    最近更新 更多