joe
joe

Reputation: 1371

App crashes on Android TV version 7+

I have a mobile app that needs to run on Android TV. I don't have a TV to test it, so I'm trying over an emulator.

The app works just fine on Android versions < 7 (Marshmallow, Lollipop). But when I open it in the emulator with Nougat on it, the app keeps crashing and I get an error that says: "Leanback Launcher keeps stopping".

I've read that I should put some things in Manifest, but I'm confused, why is it working on Android versions < 7?

This is my Manifest, so if you can take a quick look and advise me what to put inside to make it work?

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="------">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.VIBRATE" />

<permission android:name="android.permission.REBOOT" />

<uses-feature
    android:name="android.hardware.touchscreen"
    android:required="false" />
<uses-feature
    android:name="android.hardware.camera"
    android:required="true" />

<application
    android:name="-----"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher_2"
    android:label="@string/app_nameMain"
    android:launchMode="singleTask"
    android:theme="@style/AppTheme"
    tools:replace="android:label">
    <service android:name=".services.AutoUpdaterService" />

    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

    <receiver
        android:name="com.google.android.gms.gcm.GcmReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />

            <category android:name="com.codepath.gcmquickstart" />
        </intent-filter>
    </receiver>

    <service
        android:name=".services.ZipaGcmListenerService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        </intent-filter>
    </service>
    <service
        android:name=".services.ZipaInstanceIDListenerService"
        android:exported="false">

        <!-- <intent-filter> -->
        <!-- <action android:name="com.google.android.c2dm.intent.RECEIVE" /> -->
        <!-- </intent-filter> -->
    </service>

    <receiver android:name=".broadcasts.ConnectionChangeReceiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
        </intent-filter>
    </receiver>

    <activity
        android:name=".activities.LauncherActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:launchMode="singleTask"
        android:theme="@style/App.Theme.Translucent"
        android:windowSoftInputMode="adjustPan">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.AlarmTriggerActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:excludeFromRecents="true"
        android:label=""
        android:launchMode="singleInstance"
        android:theme="@style/App.Theme.Translucent"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.LogInActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.BrowserManagerActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/MyHomeCustomTheme"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.WizardActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.DeviceManagerActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustPan" />

    <service android:name="com.zipato.mqtt.MqttService" />

    <activity
        android:name=".activities.RegisterActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustPan" />
    <!-- <activity -->
    <!-- android:name=".activities.ShakeSettingActivity" -->
    <!-- android:configChanges="keyboardHidden|orientation|screenSize" -->
    <!-- android:windowSoftInputMode="adjustPan"/> -->
    <activity
        android:name=".activities.PasswordRecoveryActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.CameraActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:label="CameraActivity"
        android:launchMode="singleTop"
        android:screenOrientation="landscape"
        android:theme="@style/AppTheme"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.DiscoveryActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.ScreenShotActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.MjpegStreamActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:label="CameraActivity"
        android:launchMode="singleTop"
        android:screenOrientation="landscape"
        android:theme="@style/AppTheme"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.ShowVCMenu"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:launchMode="singleTop"
        android:windowSoftInputMode="adjustPan">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".activities.BrowserManagerActivity" />
    </activity>
    <activity
        android:name=".activities.ShowDialogActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/App.Theme.Dialog"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.WidgetConfigSwitch"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/App.Theme.Dialog"
        android:windowSoftInputMode="adjustPan">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.WidgetConfigLevel"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/App.Theme.Dialog"
        android:windowSoftInputMode="adjustPan">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.WidgetConfigRGBW"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/App.Theme.Dialog"
        android:windowSoftInputMode="adjustPan">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.WidgetConfigSecurity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/App.Theme.Dialog"
        android:windowSoftInputMode="adjustPan">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.WidgetConfigThermostat"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/App.Theme.Dialog"
        android:windowSoftInputMode="adjustPan">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.WidgetEventHandlerActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:excludeFromRecents="true"
        android:label=""
        android:launchMode="singleInstance"
        android:theme="@style/App.Theme.Dialog"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.CreateWeatherActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:excludeFromRecents="true"
        android:launchMode="singleInstance"
        android:windowSoftInputMode="adjustPan" />

    <receiver
        android:name=".broadcasts.ThermostatWidgetProvider"
        android:label="@string/zipato_thermostat_widget">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/thermostat_appwidget_info" />
    </receiver>
    <receiver
        android:name=".broadcasts.SecurityWidgetProvider"
        android:label="@string/zipato_security_widget">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/security_appwidget_info" />
    </receiver>
    <receiver
        android:name=".broadcasts.SwitchWidgetProvider"
        android:label="@string/zipato_switch_widget">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/switch_appwidget_info" />
    </receiver>
    <receiver
        android:name=".broadcasts.RGBWidgetProvider"
        android:label="@string/zipato_rgb_widget">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/rgb_appwiget_info" />
    </receiver>
    <receiver
        android:name=".broadcasts.LevelWidgetProvider"
        android:label="@string/zipato_level_widget">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/level_appwidget_info" />
    </receiver>
    <receiver
        android:name=".broadcasts.StartDevicesWidgetProvider"
        android:label="@string/zipato_start_dev_widget">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/start_dev_app_widget_info" />
    </receiver>
    <receiver
        android:name=".broadcasts.StartRoomsWidgetProvider"
        android:label="@string/zipato_start_rooms_widget">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/start_room_app_widget_info" />
    </receiver>
    <receiver
        android:name=".broadcasts.StartScenesWidgetProvider"
        android:label="@string/zipato_start_scenes_widget">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/start_scenes_app_widget_info" />
    </receiver>
    <receiver
        android:name=".broadcasts.StartFavoriteWidgetProvider"
        android:label="@string/zipato_start_fav_widget">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/start_fav_app_widget_info" />
    </receiver>

    <service
        android:name=".services.WidgetService"
        android:exported="false">

        <!-- <intent-filter> -->
        <!-- <action android:name="com.google.android.c2dm.intent.RECEIVE" /> -->
        <!-- </intent-filter> -->
    </service>

    <activity
        android:name=".activities.WebViewActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.AccountSettingsActivity"
        android:theme="@style/MyCustomTheme"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.AccountContactsActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/MyCustomTheme"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.AccountContactsAddEdit"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/MyCustomTheme"
        android:windowSoftInputMode="stateHidden|adjustResize" />
    <activity
        android:name=".activities.ActivityUsers"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/MyCustomTheme"
        android:windowSoftInputMode="stateHidden|adjustResize" />
    <activity
        android:name=".activities.ActivityUsersEdit"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/MyCustomTheme"
        android:windowSoftInputMode="stateHidden|adjustResize" />
    <activity
        android:name=".activities.ActivityGeneralSettings"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@style/MyCustomTheme"
        android:windowSoftInputMode="adjustPan" />
    <activity
        android:name=".activities.WalletActivity"
        android:theme="@style/MyCustomTheme" />
    <activity
        android:name=".activities.WalletWebViewActivity"
        android:theme="@style/MyCustomTheme" />
    <activity
        android:name=".activities.DeviceManActivity"
        android:theme="@style/MyCustomTheme" />
    <activity
        android:name=".activities.DeviceEndpointsActivity"
        android:theme="@style/MyCustomTheme" />
    <activity
        android:name=".activities.DeviceClusterEndpointActivity"
        android:theme="@style/MyCustomTheme" />
</application>

LauncherActivity is my default launcher, should I add:

<category android:name="android.intent.category.LEANBACK_LAUNCHER" />

inside its intent filter? Also, I assume I should add this permission also:

 <uses-feature android:name="android.software.leanback"
    android:required="false" />

And this thing inside application tag:

android:banner="@drawable/banner"

Is there anything else or this is completely wrong?

Upvotes: 0

Views: 1151

Answers (1)

ReyAnthonyRenacia
ReyAnthonyRenacia

Reputation: 17613

This problem has been addressed in this google forum Why do Apps that stream live TV crash under Android 7.0 Nougat on Nexus 5x?. In summary, the app you're running haven't been updated/not-ready for Nougat - higher versions of Android. Other apps, which supported Nougat, seemed to work fine.

Upvotes: 1

Related Questions