That really does not show what to launch all the time for example XFINITY ... The Cmd @bnhf posted is how I found what to launch.

This is what I launch ....
'
That really does not show what to launch all the time for example XFINITY ... The Cmd @bnhf posted is how I found what to launch.

This is what I launch ....
'
That's true, but ADBTuner will trigger the default activity for the defined scheme/host which is correct 99% of the time and a good starting point for someone looking into a new app. Often if you need to specify the activity you are using the wrong URL or scheme.
This one is interesting, because based on the android manifest for that package what you are doing should just open the app as the action triggered by that activity is android.intent.action.MAIN instead of android.intent.action.VIEW.
There are activities for /stream/live and /stream/watch (com.xfinity.cloudtvr.tenfoot.deeplinkingFull) that should just work, but they seem to be restricted in some way? It seems that you might have found a clever workaround, but getting this far into the weeds as a starting point is not recommended.
Filtering the logs that way is helpful if you are opening the app using Google's grid guide as that is what we are looking to duplicate. It will get you the package name regardless, but the activity used internally when manually using the app isn't guaranteed to be correct for external links.
adb shell dumpsys package <package name> will get you some helpful information in the Activity Resolver section under Schemes. If the scheme (ex https), domain (Authority here), and path match, the action specified will automatically be triggered.
I don't have the Comcast app, but an example:
$ adb shell dumpsys package com.google.android.youtube.tvunplugged
Activity Resolver Table:
Schemes:
http:
5c2acc0 com.google.android.youtube.tvunplugged/com.google.android.apps.youtube.tvunplugged.activity.MainActivity filter e20713e
Action: "android.intent.action.VIEW"
Action: "android.media.action.MEDIA_PLAY_FROM_SEARCH"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.BROWSABLE"
Scheme: "http"
Scheme: "https"
Authority: "tv.youtube.com": -1
Path: "PatternMatcher{GLOB: .*}"
https:
5c2acc0 com.google.android.youtube.tvunplugged/com.google.android.apps.youtube.tvunplugged.activity.MainActivity filter e20713e
Action: "android.intent.action.VIEW"
Action: "android.media.action.MEDIA_PLAY_FROM_SEARCH"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.BROWSABLE"
Scheme: "http"
Scheme: "https"
Authority: "tv.youtube.com": -1
Path: "PatternMatcher{GLOB: .*}"
5c2acc0 com.google.android.youtube.tvunplugged/com.google.android.apps.youtube.tvunplugged.activity.MainActivity filter a454b9f
Action: "com.google.android.gms.cast.tv.action.LAUNCH"
Category: "android.intent.category.DEFAULT"
Scheme: "https"
Authority: "www.youtube.com": -1
Path: "PatternMatcher{GLOB: .*}"
This is what I get ...
Can't find service: com.xfinity.cloudtvr.tenfoot
I guess you are on FireTV since you have the Xfinity app? I wonder if this command isn't available on that version of Android. I will check later. I know you have a working solution, but honestly I'm just curious why it's working the way it is lol.
It took me a lot of trial and error to get XFINITY to work. Yes on FireTV only Android that has XFINITY APP.
I have no idea, but I'm about to try out that command to see what is going on when I open that app. Thanks.
So, apparently I did have the package name correct. Here's what the log showed:
01-25 14:42:05.659 617 684 I ActivityTaskManager: START u0 {act=android.intent.action.VIEW dat=https://npo.nl/... flg=0x10000000 pkg=nl.uitzendinggemist} from uid 2000
Then there was something else:
Line 3347: 01-25 15:09:55.996 617 1038 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LEANBACK_LAUNCHER] flg=0x10000000 pkg=nl.uitzendinggemist cmp=nl.uitzendinggemist/.tv.presentation.splash.StartupActivity (has extras)} from uid 10052
So you think I should use the one with the ./tv.presentation link?
This is what you would normally use, but @Edwin_Perez might have a recommendation for you based on his experiences.
Keep in mind, opening the app is the easy part, it's the deep links that typically require some detective work -- and they may or may not even exist. If your app doesn't support deep links, you'll want to use the ah4c project as that allows for controlling the app using a virtual remote control approach. ah4c will work with pretty much any app.
I would say try this
nl.uitzendinggemist/.tv.presentation.splash.StartupActivity
This app is going to automatically map URLs matching the configuration below to the correct action.
So something like https://npo.nl/start/live?channel=NPO1 might work (with the package name nl.uitzendinggemist in ADBTuner, you wouldn't want to specify more than that). I just took this URL from their homepage, but you get the idea.
You should take a look at that website to see if you can find the URLs that match that scheme with channel IDs in them.
EDIT: This is the mobile app, not the Android TV app. This is missing in the Android TV app. The TV app does not officially support deep links.
Some success. I was able to open the app with nl.uitzendinggemist/.tv.presentation.splash.StartupActivity and in compatibility mode however just as the link describes it opens it on the splash page and not the actual live channel. I tried finding different links with different browser addons but they all show about the same kind of information. Back to the drawing board.
I installed the app from the play store to try and help and discovered that the apk I had downloaded and decompiled yesterday was for the mobile phone app and not the Android TV app.
Believe it or not, the phone version has deep link support as indicated in the android manifest screenshot I had posted, the Android TV version does NOT. I installed the mobile app under Android TV (via adb) to see if that might be a workaround, but it doesn't run at all.
I think you are going to be out of luck with this one using ADBTuner. Sorry.
This might be a candidate for ah4c.
Can anybody help me find The Tennis Channel package name? I get com.tennischannel.tceverywhere.amazon in the Select From Install list, but the app is not launching with that. I'm assuming the URL should be https://tennischannel.com/watchnow/tennischanneleverywhere-mvpd, but I'm not sure that will work. Thanks.
For the purposes of ADBTuner, there seems to be some overall confusion on this.
It is very rare that you would need to identify a specific activity (the part after the /) with an app that supports deep links. Triggering a specific activity to get the app to open usually doesn't move the needle in making the app work with ADBTuner. The package name (ex. com.sling) and a valid deep link URL is all that should be needed.
The situation is different if you are looking to open the app as part of a sequence of automated commands with hdmi-for-channels or ah4c.
com.tennischannel.tceverywhere.amazon is the package name.
Unfortunately this app does not officially have deep link support. There are no activities that trigger android.intent.action.VIEW" and there are no resolvers that accept data (eg. URLs).
$ adb shell dumpsys package com.tennischannel.tceverywhere.amazon
Activity Resolver Table:
Non-Data Actions:
android.intent.action.MAIN:
e58baac com.tennischannel.tceverywhere.amazon/com.firetv.web.MainActivity filter 29c68da
Action: "android.intent.action.MAIN"
Category: "android.intent.category.LEANBACK_LAUNCHER"
Category: "android.intent.category.LAUNCHER"
AutoVerify=false
Receiver Resolver Table:
Non-Data Actions:
com.amazon.inapp.purchasing.NOTIFY:
1b01375 com.tennischannel.tceverywhere.amazon/com.amazon.device.iap.ResponseReceiver filter 9f72285
Action: "com.amazon.inapp.purchasing.NOTIFY"
AutoVerify=false
If you want to open the app you can specify com.firetv.web.MainActivity as the activity, but this most likely won't help with ADBTuner.
What happens if you just use com.xfinity.cloudtvr.tenfoot (just the package name, without specifying an activity)?
I don't have an Xfinity account so all I get is a login screen, but it did open the app as expected based on the activity resolvers reported by the app (see screenshot I posted the other day). I know you have a working solution, I'm still just curious why it's working that way.
Thank you for digging into the Tennis Channel. It was a long shot, and anyway here's what I get when I try to play it (manually) through the LinkPi...

I also realize now that the Fire TV 4K cannot feed 4K content to the LinkPi V3 (4K):

I think a Chromecast is less demanding in terms of HDCP but then again it doesn't allow the Xfinity app.
That is why you have to use a Streamer that meets your needs ... That is why I use FireTV streamer because of XFINITY ... I can watch on 5 devices.
I also use 1 Google TV to watch DRM using the Prime Tuners.
Tennis Channels XFINITY Stream ...
Does HDCP work at 1080P? Where the LinkPi does 4K, it is limited to 30Hz/FPS due a limitation with HDMI 1.4.
Could you please take a look at my file for package name to use and if it should support deeplinks ? The one from droplist (allente.b2c.tvclient) does not open the app
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1116000517" android:versionName="1.22.4.0" android:compileSdkVersion="33" android:compileSdkVersionCodename="13" package="allente.b2c.tvclient" platformBuildVersionCode="33" platformBuildVersionName="13" xmlns:ns1="http://schemas.android.com/apk/distribution" ns1:requiredSplitTypes="base__abi,base__density" xmlns:ns2="http://schemas.android.com/apk/distribution" ns2:splitTypes="">
<uses-sdk android:minSdkVersion="26" android:targetSdkVersion="33"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.google.android.leanbacklauncher.recommendations.permission.RECOMMENDATIONS"/>
<uses-permission android:name="com.netflix.ninja.permission.TILES"/>
<uses-permission android:name="com.netflix.ninja.permission.NETFLIX_KEY"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-feature android:name="android.software.leanback" android:required="true"/>
<uses-feature android:name="android.software.live_tv" android:required="true"/>
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
<uses-feature android:name="android.hardware.wifi" android:required="false"/>
<queries>
<package android:name="no.nrk.tv"/>
<package android:name="no.tv2.sumo"/>
<package android:name="com.viaplay.android"/>
<package android:name="se.svt.android.svtplay"/>
<package android:name="com.hbo.hbonow"/>
<package android:name="dk.dr.tvplayer"/>
<package android:name="fi.mtvkatsomo"/>
</queries>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
<uses-permission android:name="com.android.providers.tv.permission.READ_EPG_DATA"/>
<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA"/>
<uses-permission android:name="com.android.providers.tv.permission.ACCESS_ALL_EPG_DATA"/>
<uses-permission android:name="com.technicolor.android.user.provider.permission.READ_USER_DATA"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/>
<uses-permission android:name="com.netflix.ninja.permission.TOKEN"/>
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<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/allente_app_logo" android:name="tv.threess.threeready.app.App" android:allowBackup="false" android:largeHeap="true" android:banner="@drawable/allente_banner" android:extractNativeLibs="false" android:networkSecurityConfig="@xml/network_security_config" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:isSplitRequired="true">
<meta-data android:name="firebase_performance_logcat_enabled" android:value="true"/>
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="true"/>
<activity android:name="tv.threess.threeready.ui.generic.activity.MainActivity" android:exported="true" android:launchMode="singleTask" android:configChanges="keyboard|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<action android:name="tv.threess.threeready.ui.SEARCH_RESULT"/>
<action android:name="tv.threess.threeready.ui.VIEW_AUDIO_SETTINGS"/>
<action android:name="tv.threess.threeready.ui.VIEW_CHANNEL_SEARCH_SETTINGS"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="@string/scheme" android:pathPrefix="@string/path_prefix_mini_epg"/>
<data android:scheme="@string/scheme" android:path="@string/path_live" android:pathPrefix="@string/path_prefix_play"/>
<data android:scheme="@string/scheme" android:pathPrefix="@string/path_prefix_app"/>
</intent-filter>
</activity>
<receiver android:name="tv.threess.threeready.ui.generic.view.DayChangedBroadcastReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.TIME_SET"/>
</intent-filter>
</receiver>
<provider android:name="tv.threess.threeready.data.allente.search.AllenteGlobalSearchProvider" android:enabled="true" android:exported="true" android:authorities="@string/global_search_provider">
<meta-data android:name="SupportedSwitchActionType" android:value="CHANNEL|TVINPUT"/>
</provider>
<provider android:name="tv.threess.threeready.data.config.ConfigProvider" android:enabled="true" android:exported="true" android:authorities="@string/config_provider"/>
<provider android:name="tv.threess.threeready.data.log.EventProvider" android:enabled="true" android:exported="false" android:authorities="@string/event_provider"/>
<service android:name="tv.threess.threeready.data.log.EventService" android:enabled="true" android:exported="false"/>
<provider android:name="tv.threess.threeready.data.tv.TvProvider" android:enabled="true" android:exported="false" android:authorities="@string/tv_provider"/>
<provider android:name="tv.threess.threeready.data.pvr.PvrProvider" android:enabled="true" android:exported="false" android:authorities="@string/pvr_provider"/>
<provider android:name="tv.threess.threeready.data.vod.VodProvider" android:enabled="true" android:exported="false" android:authorities="@string/vod_provider"/>
<receiver android:name="tv.threess.threeready.data.netflix.receiver.NetflixAuthenticationReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="com.netflix.ninja.intent.action.TOKEN_REQUEST"/>
</intent-filter>
</receiver>
<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.crashlytics.CrashlyticsRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
<meta-data android:name="com.google.firebase.components:com.google.firebase.perf.FirebasePerfRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
<meta-data android:name="com.google.firebase.components:com.google.firebase.analytics.connector.internal.AnalyticsConnectorRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
<meta-data android:name="com.google.firebase.components:com.google.firebase.remoteconfig.RemoteConfigRegistrar" 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.datatransport.TransportRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
<meta-data android:name="com.google.firebase.components:com.google.firebase.abt.component.AbtRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
</service>
<provider android:name="androidx.startup.InitializationProvider" android:exported="false" android:authorities="allente.b2c.tvclient.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"/>
</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.bumptech.glide.integration.okhttp3.OkHttpGlideModule" android:value="GlideModule"/>
<receiver android:name="com.google.android.gms.measurement.AppMeasurementReceiver" android:enabled="true" android:exported="false"/>
<service android:name="com.google.android.gms.measurement.AppMeasurementService" android:enabled="true" android:exported="false"/>
<service android:name="com.google.android.gms.measurement.AppMeasurementJobService" android:permission="android.permission.BIND_JOB_SERVICE" android:enabled="true" android:exported="false"/>
<provider android:name="com.google.firebase.provider.FirebaseInitProvider" android:exported="false" android:authorities="allente.b2c.tvclient.firebaseinitprovider" android:initOrder="100" android:directBootAware="true"/>
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
<service android:name="androidx.room.MultiInstanceInvalidationService" android:exported="false" android:directBootAware="true"/>
<service android:name="com.google.android.datatransport.runtime.backends.TransportBackendDiscovery" android:exported="false">
<meta-data android:name="backend:com.google.android.datatransport.cct.CctBackendFactory" android:value="cct"/>
</service>
<service android:name="com.google.android.datatransport.runtime.scheduling.jobscheduling.JobInfoSchedulerService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false"/>
<receiver android:name="com.google.android.datatransport.runtime.scheduling.jobscheduling.AlarmManagerSchedulerBroadcastReceiver" android:exported="false"/>
<provider android:name="com.conviva.platforms.android.ProcessLaunchProvider" android:exported="false" android:authorities="allente.b2c.tvclient.ProcessLaunchProvider"/>
<meta-data android:name="com.android.vending.splits.required" android:value="true"/>
<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_DISTRIBUTION_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="3"/>
</application>
</manifest>
Possibly.
In adbtuner the package name should be allente.b2c.tvclient.
The URL you will be looking for should contain /live
AndroidManifest.xml
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:pathPrefix="@string/path_prefix_mini_epg" android:scheme="@string/scheme"/>
<data android:path="@string/path_live" android:pathPrefix="@string/path_prefix_play" android:scheme="@string/scheme"/>
<data android:pathPrefix="@string/path_prefix_app" android:scheme="@string/scheme"/>
</intent-filter>
strings.xml
<string name="path_prefix_mini_epg">/mini-epg</string>
<string name="scheme">allente</string>
<string name="path_live">/live</string>
<string name="path_prefix_play">/play</string>