Question

I have been building a launcher app with many activities. I want the home button to always bring the user back to the mainActivity, when the home key is pressed and they have my app set as the default launcher. This works 90% of the time, but after some time the home key eventually stops working.. it registers the user's press but doesn't return them to the mainactivity any more. What causes this has evaded me.. we have tried for months to recreate the bug with some consistency but to no avail. We can't figure out what causes it to stop working.. below is my manifest. i am wondering if i am missing some sort of flag or something.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sapientnitro.lcinstore2"
    android:configChanges="keyboard|uiMode"
    android:versionCode="4"
    android:versionName="4.0" >

<uses-sdk android:minSdkVersion="15" />

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.VIBRATE" />

<uses-feature android:name="android.hardware.camera" />

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name" >
    <activity
        android:name=".activities.LCInStore2Activity"
        android:alwaysRetainTaskState="true"
        android:configChanges="orientation|keyboardHidden"
        android:label="@string/app_name"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.MainActivity"
        android:configChanges="keyboard|uiMode"
        android:label="Main"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.MAINACTIVITY" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.Authenticate"
        android:label="Authenticate"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.AUTHENTICATE" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.Settings"
        android:label="Settings"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.SETTINGS" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.CustomerHome"
        android:label="CustomerHome"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.CUSTOMERHOME" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.CustomWebView"
        android:label="CustomWebView"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.CUSTOMWEBVIEW" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.CustomCamera"
        android:label="CustomCamera"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.CUSTOMCAMERA" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.FavoritesCustomer"
        android:label="FavoritesCustomer"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.FAVORITESCUSTOMER" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.FavoritesAssociate"
        android:label="FavoritesAssociate"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.FAVORITESASSOCIATE" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.Browser"
        android:hardwareAccelerated="true"
        android:label="Browser"
        android:screenOrientation="landscape" >

        <!-- android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> -->
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.BROWSER" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.VideoViewer"
        android:label="Video Viewer"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.VIDEOVIEWER" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.GalleryOneUp"
        android:label="GalleryOneUp"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.GALLERYONEUP" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.GalleryFourUp"
        android:label="GalleryFourUp"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.GALLERYFOURUP" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.GeneralRx"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:label="GeneralRx"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateHidden" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.GeneralRX" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.SunglassRx"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:label="SunglassRx"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateHidden" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.SunglassRX" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.ComputerRx"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:label="ComputerRx"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateHidden" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.ComputerRX" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.NightGlassesRx"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:label="NightGlassesRx"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateHidden" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.NightGlassesRX" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.ActiveRx"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:label="ActiveRx"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateHidden" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.ActiveRX" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.SafetyRx"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:label="SafetyRx"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateHidden" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.SafetyRx" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.ContactRx"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:label="ContactRx"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateHidden" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.ContactRx" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.SettingsRx"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:label="SettingsRx"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateHidden" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.SettingsRX" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

    <receiver android:name=".SettingsReceiver" >
    </receiver>

    <activity
        android:name=".activities.CEETraining"
        android:label="@string/title_activity_ceetraining"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.CeeTraining" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.BrandTraining"
        android:label="@string/title_activity_brand_training"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.BrandTraining" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.LensTraining"
        android:label="@string/title_activity_lens_training"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.LensTraining" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.MakeAbility"
        android:label="@string/title_activity_makeability"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.Makeability" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.MakeabilityResults"
        android:label="@string/title_activity_makeability_results"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="com.sapientnitro.lcinstore2.activities.Makeabilityresults" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

</manifest>
Was it helpful?

Solution

I believe the problem you're having can be solved by making your Home replacement's main activity a single task.

To do that you would add the following line to your manifest as part of the main activity: launchMode="singleTask" A description of what this does can be found here.

Now whenever your app receives a home key press event and the app isn't running, it'll start a new instance with onCreate. If the app is already running in the foreground or in a suspended state, onNewIntent will be called in your main activity and it will be brought to the front.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top