Android TV Remote - App Links/Deep Linking - Guide

This is a guide for how to find out URLs to pass to the Android TV Remote - Home Assistant integration for opening apps. It’s also an attempt to collect URLs for the most common apps.

How to find out URLs

It would be good to start by reading and understanding Deep Linking on Android Developers. If an app allows deep linking, in its manifest it will have intent-filter with data like the following examples:

        <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
        <data android:scheme="http"
              android:host="www.example.com"
              android:pathPrefix="/gizmos" />
        <!-- note that the leading "/" is required for pathPrefix-->
        <!-- Accepts URIs that begin with "example://gizmos” -->
        <data android:scheme="example"
              android:host="gizmos" />

So this example accepts http://www.example.com/gizmos and example://gizmos

How to get AndroidManifest.xml with ADB access

If you can connect to the device with ADB, you can use the following command:

adb shell cmd package dump PACKAGE

Where PACKAGE is the name inside the “current_activity” attribute of the remote entity. Or alternatively, you might be able to find it in adb shell cmd package list packages

Example: adb shell cmd package dump com.google.android.youtube.tv

How to get AndroidManifest.xml without ADB access

First you need to find an APK for the app you are interested. Just search on your favorite search engine: e.g. Plex apk.
Once you have the APK you can use any of the answers on android - How to view AndroidManifest.xml from APK file? - Stack Overflow for viewing the AndroidManifest.xml

Easiest option is likely to upload and decompile the APK on APK decompiler - decompile Android .apk ✓ ONLINE ✓
Once it finishes decompiling, save the zip, open it and locate resources/AndroidManifest.xml. Open it in a text viewer and search for <data

For example you will find:

            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="plex"/>
            </intent-filter>

This means that you can open Plex with the following service call:

service: remote.turn_on
data:
  activity: plex://
target:
  entity_id: remote.living_room_tv

Some apps might have a string reference instead. For example the NBA: Live Games & Scores app has:

            <intent-filter android:label="@string/deeplink_label">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="@string/deeplink_schema" android:host="*"/>
            </intent-filter>

Searching for deeplink_schema in all decompiled files you should find a reference in string.xml:

<string name="deeplink_schema">gametime</string>

So to launch NBA: Live Games & Scores you need gametime://

Collection of deep links for apps

(Anyone can edit this guide so please click on edit and add your missing favorite app. Keep the list sorted by app name.)

App URL
10Play tenplay://
1und1.tv 1und1tv://1und1.tv
7Plus seven://
ABC iview https://iview.abc.net.au
Apple TV https://tv.apple.com
ARD https://www.ardmediathek.de
Arte arte://display
Auvio auvio://
Bally Sports ballysports://
BBC iPlayer bbc://iplayer/browse
Bell Télé Fibe fonsetv:// or fonsetv://home
CloudStream cloudstreamapp://
Crunchyroll crunchyroll://
Disney+ https://www.disneyplus.com
DisneyNow disneychannel://home [home, allshows, allgames, allmovies, live, show, collection, game]
Dropout.tv vhxdropout://
DRTV tvrecommendation://app
Emby embyatv://tv.emby.embyatv/startapp
Fox Sports foxsports://live [series,movie,watch,category,movies,special,live,channel,ppv-purchase,search]
Google Play Store https://play.google.com/store/
HBO Max https://play.hbomax.com or hbomax://deeplink
ITVX itvhomescreenchannels://com.itv.tenft.itvhub/startapp
Meo ottapp://
MLB TV mlbatbat://
My5 my5:// or https://www.channel5.com/ or https://www.my5.tv/
NBA: Live Games & Scores gametime://
Netflix https://www.netflix.com/title or netflix://
NLZiet https://nlzietshare.page.link/ or nlziet://
Paramount Plus https://www.paramountplus.com/
PBSKids https://pbskids.org/video or http://pbskids.org/video
Plex plex://
PlutoTV https://pluto.tv/en/live-tv
Prime Video https://app.primevideo.com
Private Internet Access piavpn://
Rakuten Viki viki://home
SkyShowtime https://www.skyshowtime.com/deeplink
SmartTubeNext https://www.youtube.com on CCwGTV: vnd.youtube.launch://www.youtube.com
Spotify spotify://
Streamz streamz://www.streamz.be/streamz [series,mijn-lijst]
SurfShark https://surfshark.com/locations-ul
TBS watchtbs://
Tubi https://tubitv.com/
TV4 Play tv4play://
Twitch twitch://home [home,stream,game,video,clip,search,browse,channel,user]
ViaPlay viaplay://com.viaplay.android/film/ or viaplay://deeplink/film
VRT Max vrtnu://vrtnu
VTM GO vtmgo://
Waipu TV waipu://tv or waipu://epg or waipu://recordings
YouTube https://www.youtube.com or vnd.youtube:// or vnd.youtube.launch://
YouTube TV https://tv.youtube.com
Zattoo zattoo://zattoo.com
ZDF https://www.zdf.de/filme

Notes

  • If there are multiple apps, e.g. YouTube and SmartTubeNext, that are registered for the same URL, you should get a prompt to select which app to open it with, asking you “just once” or “always”. You should select always to avoid this prompt the next time.
  • Not all apps support deep linking.
  • If an app doesn’t support deep linking, you can use the “remote: send command” service call, and send PROG_RED or PROG_GREEN etc, and then remap those buttons using the app “button mapper” to launch your desired app. This has the added benefit, if you have a physical remote with those buttons on it, of also remapping the buttons there.
49 Likes

For info, I think app open quicker when you use thing line Plex://

So i check some manifest and i don’t know if i’m just bad but here the result :

Smarttube: Just normal url

Noovo (app for Quebec TV ) : Weird result :

        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="http"/>
            <data android:scheme="https"/>
            <data android:host="@string/deep_link_url_host"/>
        </intent-filter>

If someone finds out the URL to use for Kodi. I could not detect it in the AndroidManifest.xml
Thanks!

I also have issues with the NBA app there aew 17 <data and i cant get any to work apart from crowintest:// but that then gave me a error 404

 File Name: com.nbaimd.gametime.nba2011_0.14.0-14000_minAPI24(arm64-v8a,armeabi-v7a,x86,x86_64)(nodpi)_apkmirror.com.apk, Done.
 Java decompilers
 APK decompiler
 ApkTool online
 Knowledge base
 Download Jad
 Decompilation Results
 Decompilation Results
File Name: com.nbaimd.gametime.nba2011_0.14.0-14000_minAPI24(arm64-v8a,armeabi-v7a,x86,x86_64)(nodpi)_apkmirror.com.apk
Decompiler: jadx
Job status: Done.
 com.nbaimd.gametime.nba2011_0.14.0-14000_minAPI24(arm64-v8a,armeabi-v7a,x86,x86_64)(nodpi)_apkmirror.com.apk  resources  AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="14000" android:versionName="0.14.0" android:compileSdkVersion="33" android:compileSdkVersionCodename="13" package="com.nbaimd.gametime.nba2011" platformBuildVersionCode="33" platformBuildVersionName="13">
    <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="33"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <queries>
        <intent>
            <action android:name="android.speech.action.RECOGNIZE_SPEECH"/>
        </intent>
        <intent>
            <action android:name="android.intent.action.SEND"/>
            <data android:mimeType="*/*"/>
        </intent>
        <intent>
            <action android:name="android.intent.action.SEND"/>
            <data android:mimeType="*/*"/>
        </intent>
        <package android:name="com.google.android.gms.policy_cast_dynamite"/>
        <intent>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="https"/>
        </intent>
        <intent>
            <action android:name="android.support.customtabs.action.CustomTabsService"/>
        </intent>
        <package android:name="com.android.chrome"/>
        <intent>
            <action android:name="com.adobe.adobepass.accessenabler.services.storage.global.GLOBAL_DATABASE_URI_INQUIRY"/>
        </intent>
        <intent>
            <action android:name="com.adobe.adobepass.accessenabler.services.storage.global.GLOBAL_DATABASE_URI_ELECTION"/>
        </intent>
    </queries>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
    <uses-permission android:name="com.android.vending.BILLING"/>
    <permission android:name="com.nbaimd.gametime.nba2011.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION" android:protectionLevel="signature"/>
    <uses-permission android:name="com.nbaimd.gametime.nba2011.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE"/>
    <application android:theme="@style/AppTheme" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:name="com.nba.nextgen.App" android:allowBackup="true" android:largeHeap="true" android:supportsRtl="true" android:extractNativeLibs="false" android:fullBackupContent="@xml/backup_rules" android:usesCleartextTraffic="true" android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_launcher_round" android:appComponentFactory="androidx.core.app.CoreComponentFactory">
        <profileable android:shell="true"/>
        <meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="com.mediakind.mkplayer.cast.MKCastOptionProvider"/>
        <meta-data android:name="BITMOVIN_PLAYER_LICENSE_KEY" android:value="1c463e0e-fd31-47f8-baf3-b15340638ac5"/>
        <meta-data android:name="BITMOVIN_ANALYTICS_LICENSE_KEY" android:value="E93628B9-EB3D-44B5-A9B3-D5B490E0F034"/>
        <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="@string/google_ad_manager_app_id"/>
        <meta-data android:name="io.branch.sdk.BranchKey" android:value="key_live_ddEpNB63kFwdMG424MWxhbmirAlMX5V0"/>
        <meta-data android:name="io.branch.sdk.BranchKey.test" android:value="key_test_emDmRy82cxrnPR126GZLfphlEykGY4Yi"/>
        <meta-data android:name="io.branch.sdk.TestMode" android:value="false"/>
        <meta-data android:name="com.google.android.gms.car.application" android:resource="@xml/automotive_app_desc"/>
        <meta-data android:name="com.google.android.gms.car.notification.SmallIcon" android:resource="@drawable/ic_logoman_mono"/>
        <activity android:theme="@style/Theme.App.Starting" android:name="com.nba.nextgen.splash.SplashActivity" android:exported="true" android:launchMode="singleTask" android:screenOrientation="portrait" android:windowSoftInputMode="adjustUnspecified|stateHidden|adjustResize|adjustPan|adjustNothing">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter android:label="@string/deeplink_label">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="@string/deeplink_schema" android:host="*"/>
            </intent-filter>
            <intent-filter>
                <data android:scheme="nbabranch" android:host="*"/>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="https" android:host="app.link.nba.com"/>
                <data android:scheme="https" android:host="nba-alternate.app.link"/>
                <data android:scheme="https" android:host="nba.test-app.link"/>
                <data android:scheme="https" android:host="nba-alternate.test-app.link"/>
            </intent-filter>
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="https" android:host="nba.ope.nstori.es" android:pathPattern="/open/.*/.*"/>
            </intent-filter>
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="https" android:host="nba.shar.estori.es" android:pathPattern="/go/.*/.*"/>
            </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="nbastories" android:host="open" android:pathPattern="/.*/.*"/>
            </intent-filter>
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="https" android:host="nbaqa.ope.nstori.es" android:pathPattern="/open/.*/.*"/>
            </intent-filter>
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="https" android:host="nbaqa.shar.estori.es" android:pathPattern="/go/.*/.*"/>
            </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="nbaqastories" android:host="open" android:pathPattern="/.*/.*"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
        <activity android:name="com.nba.nextgen.navigation.MainActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:theme="@style/Theme.Player" android:name="com.nba.nextgen.player.PlayerActivity" android:exported="true" android:taskAffinity=".someSpecialAffinity" android:launchMode="singleTask" android:configChanges="orientation|screenLayout|screenSize|smallestScreenSize" android:supportsPictureInPicture="true"/>
        <activity android:name="com.nba.nextgen.navigation.TempLandingActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.dev.DevSettingsActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.settings.SettingsActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.settings.SettingsAppInfoActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.settings.SettingsPrivacyActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:label="@string/profile_notifications" android:name="com.nba.nextgen.notifications.NotificationCategoryActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.notifications.GameNotificationsActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.settings.SettingsAutoplayActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.settings.SettingsScreenAppearanceActivity" android:exported="false" android:screenOrientation="portrait" android:configChanges="uiMode"/>
        <activity android:name="com.nba.nextgen.settings.SettingsBackgroundPlaybackActivity" android:exported="false" android:screenOrientation="portrait" android:configChanges="uiMode"/>
        <activity android:name="com.nba.nextgen.stats.stats.StatsActivity" android:exported="true"/>
        <activity android:name="com.nba.nextgen.web.WebViewActivity" android:exported="true" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan"/>
        <activity android:name="com.nba.nextgen.web.WebViewAdActivity" android:exported="true" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan"/>
        <activity android:name="com.nba.nextgen.profile.ProfileActivity" android:exported="true" android:launchMode="singleTop" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.profile.linkedaccounts.LinkedAccountsListActivity" android:exported="true" android:launchMode="singleTop" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.profile.edit.ProfileEditActivity" android:exported="true" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.pixelarena.PixelArenaActivity" android:exported="true" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize"/>
        <activity android:name="com.nba.nextgen.profile.edit.UpdatePasswordActivity" android:exported="true" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.tve.TvProviderLoginActivity" android:exported="true" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.profile.preferences.EmailPreferenceActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.profile.subscriptions.SubscriptionsActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.settings.SettingsVideoQualityActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.location.RestrictedLocationActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.broadcast.NBATVFullScheduleActivity" android:exported="true" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.tve.TvProviderActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.more.StandingsActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.tentpole.TentpoleActivity" android:exported="false" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.nextgen.onboarding.OnboardingActivity" android:exported="true" android:screenOrientation="portrait">
            <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
            <intent-filter>
                <action android:name="android.intent.action.SEARCH"/>
            </intent-filter>
        </activity>
        <service android:name="com.nba.nextgen.mediabrowse.NbaMediaBrowserService" android:enabled="true" android:exported="true">
            <intent-filter>
                <action android:name="android.media.browse.MediaBrowserService"/>
            </intent-filter>
        </service>
        <provider android:name="com.nba.nextgen.util.NbaFileProvider" android:exported="false" android:authorities="com.nbaimd.gametime.nba2011.fileProvider" android:grantUriPermissions="true">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths"/>
        </provider>
        <activity android:theme="@style/StorytellerTheme" android:name="com.nba.storyteller.StorytellerActivity" android:screenOrientation="portrait"/>
        <activity android:name="com.nba.opinsdk.PartnerListActivity"/>
        <service android:name="com.nba.video.MkPlayerService" android:foregroundServiceType="2"/>
        <activity android:theme="@style/StorytellerOnboardingActivityTheme" android:name="com.storyteller.p187ui.onboarding.OnboardingActivity" android:launchMode="singleTop" android:screenOrientation="userPortrait"/>
        <activity android:theme="@style/StorytellerOnboardingActivityTheme" android:name="com.storyteller.p187ui.onboarding.OnboardingActivityTablet" android:launchMode="singleTop" android:configChanges="orientation|screenSize"/>
        <activity android:theme="@style/StorytellerPagerActivityTheme" android:name="com.storyteller.p187ui.pager.StoryPagerActivity" android:launchMode="singleTop" android:screenOrientation="userPortrait" android:configChanges="uiMode"/>
        <activity android:theme="@style/StorytellerPagerActivityTheme" android:name="com.storyteller.p187ui.pager.StoryPagerActivityTablet" android:launchMode="singleTop" android:configChanges="orientation|uiMode|screenSize"/>
        <activity android:theme="@style/StorytellerPagerActivityTheme" android:name="com.storyteller.p187ui.pager.StoryPagerActivityTabletLandscape" android:launchMode="singleTop" android:screenOrientation="userLandscape" android:configChanges="orientation|uiMode|screenSize"/>
        <activity android:theme="@style/StorytellerPagerActivityTheme" android:name="com.storyteller.p187ui.pager.ClipPagerActivity" android:launchMode="singleTop" android:screenOrientation="userPortrait" android:configChanges="uiMode"/>
        <activity android:theme="@style/StorytellerPagerActivityTheme" android:name="com.storyteller.p187ui.pager.ClipPagerActivityTablet" android:launchMode="singleTop" android:configChanges="orientation|uiMode|screenSize"/>
        <activity android:theme="@style/StorytellerLinkActivityTheme" android:name="com.storyteller.p187ui.link.LinkActivity" android:launchMode="singleTop" android:screenOrientation="userPortrait"/>
        <activity android:theme="@style/StorytellerLinkActivityTheme" android:name="com.storyteller.p187ui.link.LinkActivityTablet" android:launchMode="singleTop" android:configChanges="orientation|screenSize"/>
        <provider android:name="androidx.core.content.FileProvider" android:exported="false" android:authorities="com.nbaimd.gametime.nba2011.storyteller.fileprovider" android:grantUriPermissions="true">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/storyteller_file_paths"/>
        </provider>
        <provider android:name="com.storyteller.device.contentprovider.StorytellerContentProvider" android:enabled="true" android:exported="false" android:authorities="com.nbaimd.gametime.nba2011.StorytellerProvider" android:grantUriPermissions="true"/>
        <receiver android:name="com.storyteller.device.sharing.ShareStoryBroadcastReceiver"/>
        <receiver android:name="com.storyteller.device.clip.share.ShareClipBroadcastReceiver"/>
        <activity android:name="com.adobe.marketing.mobile.FullscreenMessageActivity"/>
        <service android:name="com.braze.push.BrazeFirebaseMessagingService" android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
        <activity android:theme="@style/AuthTheme" android:name="com.crowdin.platform.auth.AuthActivity" android:exported="true" android:launchMode="singleInstance">
            <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="crowdintest"/>
            </intent-filter>
        </activity>
        <service android:name="com.bitmovin.player.offline.service.BitmovinDownloadService" android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.exoplayer.downloadService.action.RESTART"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>
        <service android:name="com.google.android.exoplayer2.scheduler.PlatformScheduler$PlatformSchedulerService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="true"/>
        <activity android:name="com.braze.p111ui.BrazeWebViewActivity" android:exported="false"/>
        <activity android:name="com.braze.p111ui.activities.BrazeFeedActivity" android:exported="false"/>
        <activity android:name="com.braze.p111ui.activities.ContentCardsActivity" android:exported="false"/>
        <activity android:theme="@style/Braze.PushTrampoline.Transparent" android:name="com.braze.push.NotificationTrampolineActivity" android:exported="false" android:launchMode="singleInstance"/>
        <receiver android:name="com.braze.push.BrazePushReceiver" android:exported="false"/>
        <activity android:theme="@style/Dexter.Internal.Theme.Transparent" android:name="com.karumi.dexter.DexterActivity"/>
        <receiver android:name="com.google.android.gms.cast.framework.media.MediaIntentReceiver" android:exported="false"/>
        <service android:name="com.google.android.gms.cast.framework.media.MediaNotificationService" android:exported="false" android:foregroundServiceType="2"/>
        <service android:name="com.google.android.gms.cast.framework.ReconnectionService" android:exported="false"/>
        <meta-data android:name="com.bumptech.glide.integration.okhttp3.OkHttpGlideModule" android:value="GlideModule"/>
        <service android:name="com.google.firebase.components.ComponentDiscoveryService" android:exported="false" android:directBootAware="true">
            <meta-data android:name="com.google.firebase.components:com.google.firebase.messaging.ktx.FirebaseMessagingKtxRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
            <meta-data android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
            <meta-data android:name="com.google.firebase.components:com.google.firebase.datatransport.TransportRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
            <meta-data android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
            <meta-data android:name="com.google.firebase.components:com.google.firebase.ktx.FirebaseCommonKtxRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
        </service>
        <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:permission="com.google.android.c2dm.permission.SEND" android:exported="true">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
            </intent-filter>
        </receiver>
        <service android:name="com.google.firebase.messaging.FirebaseMessagingService" android:exported="false" android:directBootAware="true">
            <intent-filter android:priority="-500">
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
        <activity android:theme="@style/Theme.Translucent.NoTitleBar" android:name="com.google.android.gms.common.api.GoogleApiActivity" android:exported="false"/>
        <activity android:theme="@style/Theme.Translucent" android:name="com.google.android.gms.ads.AdActivity" android:exported="false" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
        <provider android:name="com.google.android.gms.ads.MobileAdsInitProvider" android:exported="false" android:authorities="com.nbaimd.gametime.nba2011.mobileadsinitprovider" android:initOrder="100"/>
        <service android:name="com.google.android.gms.ads.AdService" android:enabled="true" android:exported="false"/>
        <provider android:name="com.google.firebase.provider.FirebaseInitProvider" android:exported="false" android:authorities="com.nbaimd.gametime.nba2011.firebaseinitprovider" android:initOrder="100" android:directBootAware="true"/>
        <provider android:name="androidx.startup.InitializationProvider" android:exported="false" android:authorities="com.nbaimd.gametime.nba2011.androidx-startup">
            <meta-data android:name="androidx.work.WorkManagerInitializer" android:value="androidx.startup"/>
            <meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer" android:value="androidx.startup"/>
            <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup"/>
            <meta-data android:name="androidx.profileinstaller.ProfileInstallerInitializer" android:value="androidx.startup"/>
        </provider>
        <service android:name="androidx.work.impl.background.systemalarm.SystemAlarmService" android:enabled="@bool/enable_system_alarm_service_default" android:exported="false" android:directBootAware="false"/>
        <service android:name="androidx.work.impl.background.systemjob.SystemJobService" android:permission="android.permission.BIND_JOB_SERVICE" android:enabled="@bool/enable_system_job_service_default" android:exported="true" android:directBootAware="false"/>
        <service android:name="androidx.work.impl.foreground.SystemForegroundService" android:enabled="@bool/enable_system_foreground_service_default" android:exported="false" android:directBootAware="false"/>
        <receiver android:name="androidx.work.impl.utils.ForceStopRunnable$BroadcastReceiver" android:enabled="true" android:exported="false" android:directBootAware="false"/>
        <receiver android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryChargingProxy" android:enabled="false" android:exported="false" android:directBootAware="false">
            <intent-filter>
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
            </intent-filter>
        </receiver>
        <receiver android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryNotLowProxy" android:enabled="false" android:exported="false" android:directBootAware="false">
            <intent-filter>
                <action android:name="android.intent.action.BATTERY_OKAY"/>
                <action android:name="android.intent.action.BATTERY_LOW"/>
            </intent-filter>
        </receiver>
        <receiver android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$StorageNotLowProxy" android:enabled="false" android:exported="false" android:directBootAware="false">
            <intent-filter>
                <action android:name="android.intent.action.DEVICE_STORAGE_LOW"/>
                <action android:name="android.intent.action.DEVICE_STORAGE_OK"/>
            </intent-filter>
        </receiver>
        <receiver android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$NetworkStateProxy" android:enabled="false" android:exported="false" android:directBootAware="false">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
            </intent-filter>
        </receiver>
        <receiver android:name="androidx.work.impl.background.systemalarm.RescheduleReceiver" android:enabled="false" android:exported="false" android:directBootAware="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <action android:name="android.intent.action.TIME_SET"/>
                <action android:name="android.intent.action.TIMEZONE_CHANGED"/>
            </intent-filter>
        </receiver>
        <receiver android:name="androidx.work.impl.background.systemalarm.ConstraintProxyUpdateReceiver" android:enabled="@bool/enable_system_alarm_service_default" android:exported="false" android:directBootAware="false">
            <intent-filter>
                <action android:name="androidx.work.impl.background.systemalarm.UpdateProxies"/>
            </intent-filter>
        </receiver>
        <receiver android:name="androidx.work.impl.diagnostics.DiagnosticsReceiver" android:permission="android.permission.DUMP" android:enabled="true" android:exported="true" android:directBootAware="false">
            <intent-filter>
                <action android:name="androidx.work.diagnostics.REQUEST_DIAGNOSTICS"/>
            </intent-filter>
        </receiver>
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
        <uses-library android:name="androidx.window.extensions" android:required="false"/>
        <uses-library android:name="androidx.window.sidecar" android:required="false"/>
        <service android:name="androidx.room.MultiInstanceInvalidationService" android:exported="false" android:directBootAware="true"/>
        <provider android:name="com.storyteller.picasso.PicassoProvider" android:exported="false" android:authorities="com.nbaimd.gametime.nba2011.org.storyteller.picasso"/>
        <meta-data android:name="com.google.android.play.billingclient.version" android:value="4.0.0"/>
        <activity android:theme="@style/Theme.Translucent.NoTitleBar" android:name="com.android.billingclient.api.ProxyBillingActivity" android:exported="false" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
        <activity android:theme="@style/Theme.Translucent.NoTitleBar" android:name="com.jakewharton.processphoenix.ProcessPhoenix" android:process=":phoenix"/>
        <receiver android:name="androidx.profileinstaller.ProfileInstallReceiver" android:permission="android.permission.DUMP" android:enabled="true" android:exported="true" android:directBootAware="false">
            <intent-filter>
                <action android:name="androidx.profileinstaller.action.INSTALL_PROFILE"/>
            </intent-filter>
            <intent-filter>
                <action android:name="androidx.profileinstaller.action.SKIP_FILE"/>
            </intent-filter>
            <intent-filter>
                <action android:name="androidx.profileinstaller.action.SAVE_PROFILE"/>
            </intent-filter>
            <intent-filter>
                <action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION"/>
            </intent-filter>
        </receiver>
        <service android:name="com.google.android.datatransport.runtime.backends.TransportBackendDiscovery" android:exported="false">

        <activity android:theme="@style/Theme.PlayCore.Transparent" android:name="com.google.android.play.core.common.PlayCoreDialogWrapperActivity" android:exported="false" android:stateNotNeeded="true"/>
        <meta-data android:name="com.android.dynamic.apk.fused.modules" android:value="base"/>
        <meta-data android:name="com.android.stamp.source" android:value="https://play.google.com/store"/>
        <meta-data android:name="com.android.stamp.type" android:value="STAMP_TYPE_STANDALONE_APK"/>
        <meta-data android:name="com.android.vending.splits" android:resource="@xml/splits0"/>
        <meta-data android:name="com.android.vending.derived.apk.id" android:value="2"/>
    </application>
</manifest>

You should search all decompiled files for “deep_link_url_host” to find its value.

Does https://app.link.nba.com work?

I’m trying to get emby working and I can’t
I managed to open the AndroidManifest.xml but I can’t find how to make it work, I tried with tv.emby.embyatv://startapp and with all the variants that I see in the file, any help?

<?xml version="1.0" encoding="UTF-8"?>
<manifest
    versionCode='208300'
    versionName='2.0.83g'
    compileSdkVersion='31'
    compileSdkVersionCodename='12'
    package='tv.emby.embyatv'
    platformBuildVersionCode='31'
    platformBuildVersionName='12'>
  <uses-sdk
      minSdkVersion='21'
      targetSdkVersion='31'>
  </uses-sdk>
  <uses-feature
      name='android.software.leanback'
      required='false'>
  </uses-feature>
  <uses-permission
      name='android.permission.INTERNET'>
  </uses-permission>
  <uses-permission
      name='android.permission.ACCESS_NETWORK_STATE'>
  </uses-permission>
  <uses-permission
      name='android.permission.RECORD_AUDIO'>
  </uses-permission>
  <uses-permission
      name='android.permission.READ_EXTERNAL_STORAGE'>
  </uses-permission>
  <uses-permission
      name='com.android.providers.tv.permission.READ_EPG_DATA'>
  </uses-permission>
  <uses-permission
      name='com.android.providers.tv.permission.WRITE_EPG_DATA'>
  </uses-permission>
  <uses-feature
      name='android.hardware.touchscreen'
      required='false'>
  </uses-feature>
  <uses-feature
      name='android.hardware.microphone'
      required='false'>
  </uses-feature>
  <uses-permission
      name='com.android.vending.BILLING'>
  </uses-permission>
  <application
      theme='@res/0x7F130005'
      label='@res/0x7F1203B1'
      icon='@res/0x7F080163'
      name='tv.emby.embyatv.TvApp'
      allowBackup='true'
      largeHeap='true'
      banner='@res/0x7F080054'
      usesCleartextTraffic='true'
      appComponentFactory='androidx.core.app.CoreComponentFactory'>
    <uses-library
        name='org.apache.http.legacy'
        required='false'>
    </uses-library>
    <activity
        label='@res/0x7F1203B1'
        name='tv.emby.embyatv.browsing.MainActivity'
        screenOrientation='0'
        logo='@res/0x7F080054'>
    </activity>
    <activity
        label='@res/0x7F1203B1'
        name='tv.emby.embyatv.startup.StartupActivity'
        exported='true'
        noHistory='true'
        logo='@res/0x7F080054'>
      <intent-filter>
        <action
            name='android.intent.action.MAIN'>
        </action>
        <action
            name='android.intent.action.SEARCH'>
        </action>
        <category
            name='android.intent.category.LAUNCHER'>
        </category>
        <category
            name='android.intent.category.LEANBACK_LAUNCHER'>
        </category>
      </intent-filter>
      <intent-filter>
        <action
            name='android.intent.action.VIEW'>
        </action>
        <category
            name='android.intent.category.BROWSABLE'>
        </category>
        <category
            name='android.intent.category.DEFAULT'>
        </category>
        <data
            scheme='embyatv'
            host='tv.emby.embyatv'
            path='/startapp'>
        </data>
        <data
            scheme='embyatv'
            host='tv.emby.embyatv'
            pathPrefix='/displayitem'>
        </data>
        <data
            scheme='embyatv'
            host='tv.emby.embyatv'
            pathPrefix='/play'>
        </data>
        <data
            scheme='embyatv'
            host='tv.emby.embyatv'
            pathPrefix='/direct'>
        </data>
      </intent-filter>
      <meta-data
          name='android.app.searchable'
          resource='@res/0x7F160001'>
      </meta-data>
    </activity>
    <activity
        label='@res/0x7F120720'
        name='tv.emby.embyatv.startup.ConnectActivity'>
    </activity>
    <activity
        label='@res/0x7F120723'
        name='tv.emby.embyatv.startup.SelectUserActivity'>
    </activity>
    <activity
        label='PlaybackOverlayActivity'
        name='tv.emby.embyatv.playback.PlaybackOverlayActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.startup.SelectServerActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.startup.ExpiredActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.settings.SettingsActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.search.SearchActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.details.FullDetailsActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.livetv.LiveTvGuideActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.browsing.GenericGridActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.validation.UnlockActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.details.PhotoPlayerActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.details.ItemListActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.playback.AudioNowPlayingActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.playback.ExternalPlayerActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.browsing.LiveTvActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.browsing.MovieActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.browsing.TvActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.browsing.MusicActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.browsing.MusicVideoActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.browsing.AudiobookActivity'>
    </activity>
    <activity
        label='@res/0x7F120721'
        name='tv.emby.embyatv.startup.DpadPwActivity'>
    </activity>
    <activity
        name='tv.emby.iap.PurchaseActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.settings.PolicyActivity'>
    </activity>
    <receiver
        name='tv.emby.embyatv.util.RemoteControlReceiver'
        exported='true'>
      <intent-filter>
        <action
            name='android.intent.action.MEDIA_BUTTON'>
        </action>
      </intent-filter>
    </receiver>
    <provider
        name='tv.emby.embyatv.integration.RecommendationContentProvider'
        exported='true'
        authorities='tv.emby.embyatv.recommendations'
        grantUriPermissions='true'>
    </provider>
    <provider
        name='tv.emby.embyatv.search.GlobalSearchProvider'
        enabled='true'
        exported='true'
        authorities='tv.emby.embyatv.search'>
    </provider>
    <activity
        label='@res/0x7F120722'
        name='tv.emby.embyatv.details.ExpandedTextActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.settings.MainSettingsActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.settings.HomeLayoutSettingsActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.settings.AudioSubSettingsActivity'>
    </activity>
    <activity
        name='tv.emby.embyatv.playback.YTPlayerActivity'>
    </activity>
    <meta-data
        name='com.google.android.play.billingclient.version'
        value='4.0.0'>
    </meta-data>
    <activity
        theme='@res/0x01030010'
        name='com.android.billingclient.api.ProxyBillingActivity'
        exported='false'
        configChanges='0x000005B0'>
    </activity>
    <meta-data
        name='com.bumptech.glide.integration.okhttp3.OkHttpGlideModule'
        value='GlideModule'>
    </meta-data>
  </application>
</manifest>
1 Like

Hi @Abejo
Any of these should work for Emby:

  • embyatv://tv.emby.embyatv/startapp
  • embyatv://tv.emby.embyatv/displayitem
  • embyatv://tv.emby.embyatv/play
  • embyatv://tv.emby.embyatv/direct

unfortunately no

I have this

                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="crowdintest"/>
            </intent-filter>

So if i use
crowdintest://
it will launch the app according to this section of the lovelace/dashboard

type: entity
entity: remote.android_tv
attribute: current_activity
state_color: true

i can see that the app name
com.nbaimd.gametime.nba2011
loads, but i get 404 | NOT FOUND
on my tv screen

Perfect, thank you very much, I couldn’t find the way.
What I realize is that when the screen saver is active it doesn’t work, is it normal behavior?

1 Like

It opens the app in the background even when the screen saver is active, but it does indeed not close the screen saver. You could use the remote.send_command service to press any button to close the screensaver:

service: remote.send_command
data:
  command: HOME
target:
  entity_id: remote.android_tv
1 Like

So i am not that good at setting out a guide, but i worked out my NBA thing and it might help others
so i found the following in my AndroidManifest.xml

<intent-filter android:label="@string/deeplink_label">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="@string/deeplink_schema" android:host="*"/>
            </intent-filter>

so looking at this line

<data android:scheme="@string/deeplink_schema" android:host="*"/>

I searched for “deeplink_schema” and it showed up in 5 of my files, but one of them was “strings.xml” and because the beginning of the scheme was @string i thought that would be a good place to look.

so i opened the strings.xml and searched for “deeplink_schema” (exactly as it was in my <data line)
and found the line

<string name="deeplink_schema">gametime</string>

so I used gametime and added the :// eg. gametime://
and it works
I hope this helps others find the Activity ID or Activity Name to start their apps.

Thanks to @tronikos for the integration and the hints he has placed on this page. I would love to add

NBA gametime://

to the app list above, but i cannot edit it

good luck hope it helps

I’m curious about this… I really want to get YouTube TV working. If I use http://tv.youtube.com on my Shield TV, it works. If I use the same on my Chromecast with Google TV, it shows “You don’t have an app that can do this”. Anyone else try this?

3 Likes

Basically, I’m looking for any methods to open Youtube TV on Chromecast w/ GTV, and ideally open a specific channel. Any pointers would be appreciated!

2 Likes

Updated list :slight_smile:

Collection of deep links for apps

(Anyone can edit this guide so please click on edit and add your missing favorite app. Keep the list sorted by app name.)

App URL
Auvio auvio://
CloudStream cloudstreamapp://
Disney+ https://www.disneyplus.com
Emby embyatv://tv.emby.embyatv/startapp
NBA app gametime://
Netflix Netflix
Plex plex://
Prime Video https://app.primevideo.com
SmartTubeNext https://www.youtube.com
Spotify spotify://
YouTube https://www.youtube.com

nb: I try to find a way to open TiviMate and Media TV Show but found nothing… any help is for sure welcome :stuck_out_tongue:

2 Likes

Hi @bartland

seeing what we can see below, have you tried :

ftp:// or rtp:// or rtsp:// or mms:// ?

            <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:mimeType="video/*"/>
                <data android:mimeType="audio/*"/>
                <data android:mimeType="image/*"/>
                <data android:scheme="file"/>
                <data android:scheme="content"/>
                <data android:scheme="http"/>
                <data android:scheme="https"/>
                <data android:scheme="ftp"/>
                <data android:scheme="ftps"/>
                <data android:scheme="rtp"/>
                <data android:scheme="rtsp"/>
                <data android:scheme="mms"/>
                <data android:scheme="dav"/>
                <data android:scheme="davs"/>
                <data android:scheme="ssh"/>
                <data android:scheme="sftp"/>
                <data android:scheme="smb"/>

Updated list again :slight_smile:

Collection of deep links for apps

(Anyone can edit this guide so please click on edit and add your missing favorite app. Keep the list sorted by app name.)

App URL
10Play tenplay://
7Plus seven://
ABC iview https://iview.abc.net.au
ARD https://www.ardmediathek.de
Arte arte://display
Auvio auvio://
CloudStream cloudstreamapp://
Disney+ https://www.disneyplus.com
Emby embyatv://tv.emby.embyatv/startapp
NBA app gametime://
Netflix Netflix
Plex plex://
Prime Video https://app.primevideo.com
SmartTubeNext https://www.youtube.com
Spotify spotify://
SurfShark https://surfshark.com/locations-ul
YouTube https://www.youtube.com
ZDF https://www.zdf.de/filme
5 Likes

I tried them all. No luck.

I updated the 1st post with the apps mentioned above. In the future please update it directly. All topics in the guides section are supposed to be wiki. If you cannot edit it maybe we should involve mods in case I missed a checkbox or something when I created this.

1 Like