Reputation: 1371
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
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