我们正试图连接我们的AndroidTV应用程序,以将结果附加到全局搜索中.我遇到了一个问题,我无法通过api调用来获取结果,因为系统在主线程上调用了我的内容提供程序.
@Override
public Cursor query(Uri uri, String[] projection, String search, String[] selectionArgs, String searchOrder) {
... Logic here that calls the API using RxJava / Retrofit
return cursor;
}
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/foo"
android:searchSettingsDescription="@string/foo_results"
android:includeInGlobalSearch="true"
android:searchSuggestAuthority="com.foo.search.provider"
android:searchSuggestIntentAction="android.intent.action.VIEW" />
<provider
android:authorities="com.foo.search.provider"
android:name=".search.GlobalSearchProvider"
android:exported="true"/>
Run Code Online (Sandbox Code Playgroud)
当我进行全局搜索时,我可以看到ContentProvider#查询被调用.如果我尝试在当前线程上进行api调用,我会得到一个networkonmainthreadexception.
我试图通知数据已经改变的光标,但也没有成功.
getContext().getContentResolver().notifyChange(Uri.parse("content://com.foo.test"), null);
...
cursor.setNotificationUri(getContext().getContentResolver(), Uri.parse("content://com.foo.test"));
Run Code Online (Sandbox Code Playgroud)
无论如何,我可以强制操作系统在单独的线程上调用内容提供程序,或者至少通知搜索光标有新内容?
谢谢
我可以在发送HDMI-CEC命令的Android TV设备上制作应用吗?
当您打开应用程序时,它应该执行命令并关闭.
可能吗?
我使用了android tv leanback库的Google示例项目作为参考.
所以,我的问题是如何在Android TV中的BrowseFragment Header中添加项目(即Button,ImageView,TextView)和搜索按钮.
我可以使用下面的代码注释隐藏搜索按钮,但我无法添加项目和搜索按钮.
setOnSearchClickedListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity(), SearchActivity.class);
startActivity(intent);
}
});
Run Code Online (Sandbox Code Playgroud)
左侧和右侧的两个列表都是带有垂直LinearLayoutManagers的RecyclerViews,Header视图是静态的.使用D-PAD导航在一个列表中工作正常,但是当从一个列表切换到另一个列表时,存在问题.焦点从list1的项目5移动到list2'项目5.当列表2短的时间少于5项时,它就会失去焦点.
我希望保存最后一个聚焦项目索引,并且当用户导航list1-list2-list1时,具有该索引的项目再次获得焦点并且还防止视图失去焦点.这有什么好的解决方案吗?
所需行为:用户导航到列表顶部并按"向上" - 焦点保持原样,没有任何反应.用户导航到列表的底部并按下"向下" - 焦点停留在原来的位置,没有任何反应.用户从list1导航到list2 - 之前在list2中具有焦点的项目,如果之前没有聚焦,则获得焦点或item0获得焦点.
主要布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/iv_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="false"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="27dp"
android:layout_marginLeft="48dp"
android:layout_marginRight="48dp"
android:layout_marginTop="27dp"
android:orientation="horizontal"
>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:orientation="horizontal"
>
<ImageView
android:id="@+id/iv_poster"
android:layout_width="@dimen/episodes_list_item_height"
android:layout_height="@dimen/episodes_list_image_width"
/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
>
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/tv_release_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
/>
<TextView
android:id="@+id/tv_rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:drawableLeft="@drawable/ic_star_white_24dp" …Run Code Online (Sandbox Code Playgroud) 我想发布多个apks:一个用于移动和其他androidtv在同一个应用程序中.根据使用不同过滤器发布多个APK,同一应用程序中只有四个可区分的过滤器:
目前,只有当每个APK根据以下配置提供不同的过滤器时,Google Play才允许您为同一应用发布多个APK:
OpenGL纹理压缩格式
屏幕尺寸(以及可选的屏幕密度)
API级别
CPU架构(ABI)
所有其他过滤器仍然可以像往常一样工作,但这四个过滤器可以区分Google Play上相同应用程序列表中的一个APK与另一个.例如,如果APK仅根据设备是否有摄像头而有所不同,则无法为同一应用程序发布多个APK.
我想通过API级别和屏幕大小来区分,但似乎有重叠:
androidtv app的API级别(MinSDK)保持在21,移动应用程序的级别保持在16级.因此API级别(21级及以上)有重叠.
Android tv的屏幕尺寸可能与平板电脑的屏幕尺寸重叠:例如.在常见的高清晰度电视的显示分辨率为720P,1080i和1080P.此外,三星nexus分辨率为720x1280.
我担心,如果我发布更高版本的androidtv apk,它可能会取代平板电脑上的移动应用程序,API级别> = 21,屏幕尺寸为720x1280,也符合电视应用程序布局大小.
那么如何使用应用程序清单中的不同过滤器清楚地区分这两个apks?
UPDATE
我已经在androidtv应用程序的清单中添加了leanback功能
<manifest>
<uses-feature android:name="android.software.leanback"
android:required="true" />
...
</manifest>
Run Code Online (Sandbox Code Playgroud)
我看到42个支持的设备用于androidtv apk(无法查看哪些设备)和10791用于移动apk设备和总共10832个设备支持整个应用程序.
10791 + 42 = 10833
因此,仍然存在1(10833 - 10832 = 1)重叠设备的可能性,因为显示警告.
重叠警告
androidtv apk
移动apk
总设备
我不认为重叠的消息是因为androidtv apk是一个移动apk的超级集,正如其中一个评论中提到的那样,看看androidtv支持的设备数量要少得多.
由于只有一个可能的重叠设备,我将发布它,但我希望我知道哪些设备重叠以接收两个apks.
我需要查看我的androidTV应用程序发出的后端https请求,但是,由于呼叫是"https"呼叫,我需要安装一个查尔斯证书(在我的androidTV上)以允许查尔斯解密它们.
如果有人知道如何在androidTV上安装证书,请告诉我.
非常感谢!
如何定制ImageCardView圆形Leanback?
我最近在我的应用程序中为 Android TV 用户添加了对 4K 的支持。我的测试设备是SONY KD-49XF9005。虽然内置的图像查看器以及 YouTube 可以毫无问题地以 4K 显示,但到目前为止我还没有运气让它适用于我的应用程序。
我的应用程序使用 GLSurfaceView 来渲染图像。我遵循了 4K 显示模式 API 指南,希望能够选择电视上可用的 4K 显示模式之一,以便我的 GLSurfaceView 可以以物理分辨率进行绘制(代码片段如下所示)。但是,API 不断地向我返回一种且只有一种显示模式,即 1080p。这真的很困扰我,硬件应该支持它,因为其他内置应用程序可以使用 4K,为什么它不为我的应用程序返回 4K 显示模式?
我还通读了所有相关的 Android TV 开发人员指南,但找不到任何特别之处。如果有人能对此有所了解,我将不胜感激。谢谢!
public static void select4kDisplayMode(Context context, Window window) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return;
}
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
Display.Mode[] modes = display.getSupportedModes();
if (modes == null) {
return;
}
Display.Mode selected = null;
long max = 0;
for (Display.Mode mode : …Run Code Online (Sandbox Code Playgroud) I am using android leanback-assistant sample of google to enable google assistant support in my AndroidTV app. But in given code snippet the query() method of SearchContentProvider is not receiving the processed string what I get from uri.lastPathSegment(). e.g. if user says "play gravity movie", the content provider should receive only "gravity" as query but it receive complete string "play gravity movie". Is that an expected behaviour. What could be the solution if not?
class SearchContentProvider : ContentProvider() {
private …Run Code Online (Sandbox Code Playgroud) 环境
反应:16.3.1 反应原生:0.55.3
描述
我已经在 React Native 上实现了一个多维列表视图,其中包含一些水平 FlatLists 。一切都显示正确。但是,当我将焦点一直移动到行尾时,当我尝试向右移动时(已经在行尾),焦点将自动转到下面的行。
是否有解决方案可以防止这种情况发生并确保焦点在到达 flatlist 的末尾时会停止?
重现步骤
垂直渲染一个 FlatList,每一行都是另一个水平 FlatList。滚动到一行的末尾,尝试向右移动,焦点将向下移动到下一行。
预期行为 预期行为应该是无,因为我们位于当前行的末尾。
如果在一行的后端,则实际行为焦点转到下一行
我搜索了文档,这是 firetv/androidtv 的一个特定问题。
与此相同的问题:https : //github.com/facebook/react-native/issues/20100但该错误已“关闭”
示例代码:从 'react' 导入 React、{Component};从'react-native' 导入 {View, Text, TouchableOpacity, ScrollView};
导出默认类 App extends Component { render() { const data = []; for (let i = 0; i < 10; i++) data.push(i);
return (
<View>
{[1, 2].map(() => (
<ScrollView horizontal style={{height: 210}}>
{data.map(i => (
<TouchableOpacity key={i}>
<View
style={{
backgroundColor: 'grey',
width: 200, …Run Code Online (Sandbox Code Playgroud) android-tv ×10
android ×7
leanback ×3
focus ×2
cardview ×1
d-pad ×1
google-play ×1
hdmi ×1
multiple-apk ×1
react-native ×1
search ×1
shell ×1