我正在使用leanback库,它需要Android 17或更高版本.但是我的应用支持minSDK为16,所以我从gradle说得到了一个构建错误
Error:Execution failed for task ':Tasks:processPhoneDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 17 declared in library /Users/mike/Projects/android-for-dummies-v3/Tasks/build/intermediates/exploded-aar/com.android.support/leanback-v17/21.0.2/AndroidManifest.xml
Suggestion: use tools:overrideLibrary="android.support.v17.leanback" to force usage
Run Code Online (Sandbox Code Playgroud)
当我查看构建工具文档时,我看到如何将overrideLibrary
标记添加到我的清单中,但问题是我在gradle文件中而不是在清单中声明了我的minSdk.
overrideLibrary
在build.gradle中而不是在AndroidManifest.xml中声明minSdk时如何使用?
我目前使用常规RecyclerView
有GridLayoutManager
不同spanCount
的depeding viewType
为Android TV的应用.一切都很好,但我有两个问题:
RecyclerView
当前聚焦视图保持在网格中心?似乎列出的问题是通过使用VerticalGridView
from LeanBack
库修复的,但LayoutManger
它使用的是内部的,不支持spanCount
.
我们遇到HDMI服务问题.我们的Android TV应用程序在STB上设置为默认值.启动STB时,它不会显示启动器,它会立即显示应用程序,播放HLS视频流.对于播放视频,我们使用Exo Player版本2.6.1和Exo Media包装器版本4.1.0.当STB在睡眠后醒来时,我们会一次调查黑屏 - DPAD打开电源.播放列表我们在这种情况下得到的是工作和切换到另一个的渠道很好.此问题通常在同一用户处生成.
这是我们从屏幕为黑色时获取的日志(URL_TEST是我们的播放列表请求):
09-06 19:21:40.018 I/PowerManagerService( 369): Waking up from sleep...
09-06 19:21:40.018 I/WindowManager( 369): No lock screen!
09-06 19:21:40.038 I/AudioHardwareALSA( 104): AudioHardwareALSA::setParameters() screen_state=on
09-06 19:21:40.038 I/qtaguid ( 369): Failed write_ctrl(s 1 10056) res=-1 errno=1
09-06 19:21:40.038 W/NetworkManagementSocketTagger( 369): setKernelCountSet(10056, 1) failed with errno -1
09-06 19:21:40.078 D/LightsService( 369): Excessive delay setting light: 54ms
09-06 19:21:41.018 W/SurfaceFlinger( 101): Timed out waiting for hw vsync; faking it
09-06 19:21:41.158 W/OkHttp ( 682): previous …
Run Code Online (Sandbox Code Playgroud) 我正在构建一项服务,将安装的应用程序列表从Android TV或Fire TV发送到手机.然后,手机会发回它想要启动的应用程序的程序包名称,然后服务就会启动它.
这是创建列表的代码
public List<InstalledApp> GetInstalledApps(boolean isAndroid) {
PackageManager pm = getPackageManager();
List<ApplicationInfo> allPackages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
List<InstalledApp> userPackages = new ArrayList<InstalledApp>();
for (ApplicationInfo packageInfo : allPackages) {
if (isSystemPackage(packageInfo)) continue;
InstalledApp app = new InstalledApp();
app.setPackageName(packageInfo.packageName);
app.setAppName(pm.getApplicationLabel(packageInfo).toString());
if (!isAndroid) {
app.setIcon(pm.getApplicationIcon(packageInfo));
}
app.setAccentColor(getAccentColor(pm.getApplicationIcon(packageInfo)));
userPackages.add(app);
}
return userPackages;
}
Run Code Online (Sandbox Code Playgroud)
这就是我启动应用程序的方式
public void launchApp(String packageName) {
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(packageName);
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
在Fire TV上,一切都很完美,但在Android TV上,许多应用程序的意图始终为空.这些才一点点.
但是使用相同的代码,这些应用程序工作正常.
谁能提供任何有关我可能做错的见解?
谢谢!
编辑: …
有没有办法检查应用是否在Android TV或Android Mobile上运行?
我知道如何检查正在运行的构建.如果应用程序在Android TV和Mobile上运行,我想启动特定服务.希望把两个人放在同一个图书馆里.
Android TV Remote使用什么协议?似乎不再使用Anymote.但是仍然有像Android TV遥控器和远程Android TV这样的应用程序,即使是较新的Android TV也能很好地运行.有人可以指出任何官方/非官方文档来编写此类应用程序吗?
Android TV可以通过蓝牙或WiFi进行控制.如果其中任何一个遵循可以合并到Python或Android程序中的开放协议,那将是很好的.
基于各种评论和回复的几点澄清:
Anymote肯定不再是正在使用的协议(除非它被隐藏,仍可以某种方式用于未记录的fashio)
Android TV远程当前使用的端口(6466/6467)与Anymote标准端口(9552)不同
旧的开源GoogleTV远程应用程序不再适用于AndroidTV
我仍然看到通过mDNS公布"_androidtvremote._tcp" - 所以有一种方法可以通过TCP控制它.
我正在尝试使用DIAL启动Android TV应用.我将应用程序安装在我的Android TV上
"com.test.example"
我也将这条路径注册到DIAL网站,网址为:http://www.dial-multiscreen.org/dial-registry/namespace-database
我可以通过DIAL从我的手机配对到Android TV,但是每当我尝试实际启动应用程序时(使用ConnectSDK),我都会收到一个非常不明显的错误消息.关于这应该如何工作的文档很少.我是否需要在AndroidManifest中为电视应用注册某种DIAL接收器?我怎样才能让它认识到我在做什么.我试图通过以下方式传递"appId"......
appId = "com.text.example"
appId = "example"
appId = "Example"
我失踪了吗?
我在Android TV应用程序中使用Google Leanback小部件.它使用带有ListRows的RowsFragment.
我想要确定的是,是否有任何方法可以以编程方式滚动到其中一行中的特定对象.我已经挖掘了Leanback小部件的文档,但无法找到我正在寻找的东西.
其实我现在正在为AndroidTV应用程序工作.我RecyclerView
在NestedScrollView
这个图像中有从右到左的多个水平.
问题是,当我向左滚动更多时,焦点移动到不同的列表或不同的视图,这是不好的.
我不希望焦点改变.如果列表到达结尾,则焦点应保持在相同位置.
我试过了 :
android:descendantFocusability="blocksDescendants"
android:focusableInTouchMode="true" //in parent layout
Run Code Online (Sandbox Code Playgroud)
但它没有用..
谁能帮我吗 ??
没解决
android ×10
android-tv ×10
exoplayer ×1
exoplayer2.x ×1
gradle ×1
hdmi ×1
leanback ×1
nexus-player ×1