我正在亚马逊Fire TV上开发.
因为它是一个电视应用程序(没有触摸),我需要在行的布局内的焦点能够导航.
我有一个非常简单Recyclerview
的图像,文字和可聚焦.当我向上或向下按压时,它都会正确滚动和填充,但是我注意到当我导航速度快于滚动可以跟上时,它会创建新的视图(关闭屏幕)并延迟UI.
我创建了一个包含Creation数字的活动.当我慢慢滚动时,最高的创作#是10.但是当我快速滚动时,我会在一秒内获得创作号为60的卡片.这会导致巨大的延迟,并且应用程序会丢失大量帧.我的做法完全错了吗?
使用下面的代码来测试它.
/**
* Created by sylversphere on 15-04-15.
*/
public class LandfillActivity extends Activity{
private Context context;
private static int ticketNumber;
private static int getTicket(){
ticketNumber ++;
return ticketNumber;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
setContentView(R.layout.landfill_activity);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
GridLayoutManager glm = new GridLayoutManager(context, 2);
recyclerView.setLayoutManager(glm);
SickAdapter sickAdapter = new SickAdapter();
recyclerView.setAdapter(sickAdapter);
}
public class SickViewHolder extends RecyclerView.ViewHolder{
TextView ticketDisplayer;
public ImageView imageView;
public SickViewHolder(View itemView) …
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上,许多应用程序的意图始终为空.这些才一点点.
但是使用相同的代码,这些应用程序工作正常.
谁能提供任何有关我可能做错的见解?
谢谢!
编辑: …
我有一个应用程序,基本上只是加载一个网站来显示该信息.在网站中我有一个加载事件日历的iframe.
在计算机上查看网站(通过Chrome),事件日历看起来应该是它应该的样子(是的,我知道字体非常小).
通过Android应用程序在FireTV Stick上查看网站,iFrame(事件日历)中的字体大小可以扩展.
我注意到,使用FireTV时,分辨率是1920x1080
实际的显示分辨率960x540
(缩小浏览量会导致相同的效果)@see 屏幕尺寸和分辨率
Chrome中的图片(正确显示)
FireTV WebView(不正确)
我也读过Font-Boosting,这是我最初认为的问题所在,但我已经消除了,因为没有"禁用"它的技术(
html * {max-height: 99999999px}
等等......)
我觉得好像问题在于我在Android应用程序中调用WebView以及正在应用的设置.我几乎可以肯定我错过了那些可以解决这个问题的东西.以下是我对WebView设置的看法:
mWebView = (WebView) findViewById(R.id.activity_main_webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setMediaPlaybackRequiresUserGesture(false);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setSupportZoom(true);
webSettings.setDefaultFontSize(12);
mWebView.setInitialScale(1);
Run Code Online (Sandbox Code Playgroud)
编辑1:好的,我发现不仅iFrame正在扩大规模,而且它是FireTV上的所有内容(这显然是一个功能).它们的显示分辨率(dp)为960x540.似乎没有办法制作1920x1080的东西,但是当我通过Rise Vision的"My Rise Player"应用程序显示iframe时,一切看起来都很正常.
他们是如何找到一种方法在FireTV上显示1920x1080的内容?
如果Rise Vision的开发团队中的任何人都愿意评论并指出我正确的方向,我将非常感激!
由于Android TV leanback库显然与SDK级别17兼容,这是亚马逊Fire TV所使用的,我在Android TV应用程序上设置了最低SDK级别,并在我的Fire TV上使用ADB进行安装.它实际上没有任何问题.但是,它不会出现在"设置"中的应用列表中,因此我只能通过ADB启动它.当我尝试在亚马逊开发者控制台中进行实时应用测试时,它甚至都不会安装.
是否有一些设置或我可以更改以使其正常工作?很遗憾没有能够使用leanback库,因为它确实有效,而且因为亚马逊并没有提供任何与之相当的东西.
当我通过Android Studio安装应用程序时,我的应用程序运行正常,但是当我尝试使用adb安装应用程序时,我收到INSTALL_FAILED_DEXOPT
错误.我尝试了很多东西,比如清洁,无效等,但一切都失败了.
这只发生在操作系统版本为5.1.1的Fire TV Sticks上,反之在Fire TV上,无论操作系统如何(即使在5.1.1 Fire TV上),该应用程序也能正常运行.
Gradle版本:4.4(回到4.1没有帮助)
Android插件版本:3.1.2(回到3.0.1没有帮助)
构建工具版本:27.0.3
minSdkVersion:21
compileSdkVersion:26
targetSdkVersion:26
我假设这是我在安装Live App Testing应用程序时未在棒棒糖设备上安装我的构建的原因.
请让我知道如何解决此错误.
附加Logcat输出:https://gist.github.com/anas-incedo/64992269a1734061a2f739a5887e809c
我已经找到了几个例子,随着工作Leanback
和ExoPlayer
我有所有的工作,但我不能让字幕/字幕的工作。我能找到的最新 Google 示例(https://github.com/android/tv-samples)在 Java 示例上有一个标题按钮,但它们从未出现。Kotlin 示例有一条评论说// TODO(owahltinez): handle captions
.
我已经对其中一个样本进行了这些更改,但没有帮助:
private void prepareMediaForPlaying(Uri mediaSourceUri) {
String userAgent = Util.getUserAgent(getActivity(), "VideoPlayerGlue");
DefaultDataSourceFactory defaultDataSourceFactory = new DefaultDataSourceFactory(getActivity(), userAgent);
MediaSource mediaSource =
new ExtractorMediaSource(
mediaSourceUri,
defaultDataSourceFactory,
new DefaultExtractorsFactory(),
null,
null);
String subtitle = "https://subtitledomain/sintel-en.vtt";
Uri uriSubtitle = Uri.parse(subtitle);
MediaSource subtitleMediaSource = new SingleSampleMediaSource.Factory(defaultDataSourceFactory)
.createMediaSource(uriSubtitle, Format.createTextSampleFormat(null, MimeTypes.TEXT_VTT, C.SELECTION_FLAG_FORCED, "n/a"), C.TIME_UNSET);
mediaSource = new MergingMediaSource(mediaSource, subtitleMediaSource);
mPlayer.prepare(mediaSource);
}
Run Code Online (Sandbox Code Playgroud)
还有这个变化:
mTrackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
DefaultTrackSelector.Parameters parameters = mTrackSelector.getParameters(); …
Run Code Online (Sandbox Code Playgroud) 我对 Android 开发还很陌生,距离我的第一个项目大约还有 2 周时间。因此,解决方案可能是显而易见的,我只能希望这最终能帮助另一个站在我的立场上的人。
目标是为 FireTV 构建一个可以流媒体(点播或实时视频流)的应用程序。
我开始在亚马逊的开发者门户上进行研究,下载了 AS、亚马逊 SDK,以及我被告知需要继续的任何其他内容。我的第一个想法是熟悉 Lollipop,使用 Google TV 作为模拟器,并使用 TV Activity 模板,据我所知,该模板很大程度上基于 Leanback 库。我根据自己的喜好构建、测试和修改,并使用可以处理 api21 的模拟器制作了一个可以运行的应用程序。然后是时候“改造”我使用 Amazon Fire TV sdk 插件 (API 17) 所使用的内容了。在此过程中了解了一些有关 AppCompat 和其他一些错误的知识,其中大多数错误是我可以自己解决的。但现在,我被困住了。
由于我正在使用 FireTV 插件,Gradle 无法编译,并且在这个级别控制台输出对我没有帮助。
“出了什么问题:任务':app:processDebugResources'执行失败。
com.android.ide.common.internal.LoggedErrorException:无法运行命令:C:\path\to\sdk\build-tools\21.1.2\aapt.exe package -f --no-crunch -IC:\path \to\sdk\platforms\android-17\android.jar -MC:\path\to\app\build\intermediates\manifests\full\debug\AndroidManifest.xml -IC:\path\to\sdk\add-ons \addon-amazon_fire_tv_addon-amazon-17\libs\notification.jar -IC:\path\to\sdk\add-ons\addon-amazon_fire_tv_addon-amazon-17\libs\gamecontroller.jar -SC:\path\to\app \build\intermediates\res\debug -AC:\path\to\app\build\intermediates\assets\debug -m -JC:\path\to\app\build\ generated\source\r\debug -FC:\路径\to\app\build\intermediates\res\resources-debug.ap_ --debug-mode --custom-package com.d53e.rbeal.fntsysportsnetwork -0 apk --output-text-symbols C:\path\to \app\build\intermediates\symbols\debug 错误代码:1 输出:错误:资产包不包括 'C:\path\to\sdk\add-ons\addon-amazon_fire_tv_addon-amazon-17\libs\notification.jar'成立。* 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。* "
被困在这里两天了,时间紧迫,急需进展。无法弄清楚如何按照建议包含 --stacktrace 或 --info 。
惊慌失措中,我尝试将项目移植到 …
编辑:
找了一阵子好像目前还没有办法创建Fire TV的虚拟设备
我正在尝试使用 AVD Manager 创建一个 amazon 虚拟设备,但我无法找到正确的图像。
我按照此处详述的步骤操作:https : //developer.amazon.com/public/solutions/devices/fire-tv/docs/setting-up-your-development-environment
但是他们没有指定有关创建测试设备的任何内容。
也在这里:
说:
The steps described here cannot be used to simulate the Fire TV.
Run Code Online (Sandbox Code Playgroud)
但从不提供有关如何执行此操作的文档的链接。
难道没有办法创建虚拟消防电视吗?
非常感谢!
我正在使用 Amazon Fire Stick TV 开发电视应用程序。我需要通过电视遥控器处理 Dpad 中心按钮的长按事件。onKeyDown()
对于 DPad 中心按钮,只有长按 DPad 中心按钮时我才会多次接到呼叫。
尝试长按 DPad 中心按钮时,我没有收到任何对Activity 的OnKeyUp()
方法和方法的调用。onLongKeyPress()
这是一个错误吗?
我的编译 SDK 版本是“23”。
我正在尝试使用 Android Lean 后备库构建我的第一个 Amazon Fire TV 应用程序。我想自定义 BrowseFragment 看起来像下面显示的图像。
我尝试如下设置自定义布局。
@Override public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,
Bundle savedInstanceState) {
View title = inflater.inflate(R.layout.custom_title_view, parent, false);
titleImageView = (AppCompatImageView) title.findViewById(R.id.title_content_thumbnail);
return title;
}
Run Code Online (Sandbox Code Playgroud)
但生成的布局如下所示,带有透明的 TitleView 和列表行显示在其下方。请提出一种更好的方法来使 UI 看起来与第一张图像相似。找不到任何可以实现这一点的东西。
amazon-fire-tv ×10
android ×9
android-tv ×4
build.gradle ×1
exoplayer ×1
exoplayer2.x ×1
iframe ×1
java ×1
nexus-player ×1
titleview ×1