我正在研究电视推荐/主屏幕频道应用。
我已经在Android TV主屏幕上成功显示了我的应用程序中的程序列表,并且每当用户从主屏幕中选择任何程序时都能够启动VideoPlaybackActivity。
问题:无法启动用户在主屏幕上选择的特定视频
这是代码,我已编写了这些代码来启动 VideoListingActivity
中的程序public void dynamicPrograms() {
for (Movie movie : movieArrayListHomeScreen) {
Uri posterArtUri = Uri.parse(movie.getImageUrl(Movie.IMAGE_ICON));
Uri previewVideoUri = Uri.parse(movie.getPlaybackUrl());
PreviewProgram program = new PreviewProgram.Builder()
.setChannelId(channelId)
.setType(TvContractCompat.PreviewPrograms.TYPE_MOVIE)
.setTitle(movie.getName())
.setDescription(movie.getName() + " description goes here")
.setPosterArtUri(posterArtUri)
//.setPreviewVideoUri(previewVideoUri)
.setInternalProviderId(String.valueOf(movie.getId()))
.setContentId(String.valueOf(movie.getId()))
.setIntentUri(Uri.parse(SCHEME + "://" + APPS_LAUNCH_HOST
+ "/" + PLAY_VIDEO_ACTION_PATH + "/" + movie))
.build();
Uri programUri = getApplicationContext().getContentResolver()
.insert(TvContractCompat.PreviewPrograms.CONTENT_URI, program.toContentValues());
long programId = ContentUris.parseId(programUri);
Log.d("programId:", String.valueOf(programId));
}
}
注意:我正在使用Intent传递数据,但在VideoPlaybackActivity中没有获得相同的数据,但是如果我在一个Activity中使用相同的Intent(假定在Detail Activity中)来调用VideoPlaybackActivity,那么我会与我在Logcat中打印的选定/特定视频的数据相同
这是我在 VideoDetailsActivity 中用来在VideoPlaybackActivity
中播放选定视频的方法Intent intent = new Intent (v.getContext (), VideoPlaybackActivity.class);
intent.putExtra (VideoPlaybackActivity.EXTRA_MOVIE, movie);
startActivity (intent);
但是当我直接从Android TV主屏幕调用VideoPlaybackActivity时(没有在Logcat中获取特定视频的价值),因此无法启动VideoPlaybackActivity来播放特定视频
Manifest.xml
<activity android:name=".ui.activity.VideoPlaybackActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:scheme="androidtvhomescreenchannels"
android:host="com.androidtv.hsc"
android:pathPrefix="/playvideo" />
</intent-filter>
</activity>
注意:即使,我也想知道我从主屏幕中选择了哪个特定程序,我很想在Logcat中查看该程序/电影的名称
答案 0 :(得分:0)
由于某些原因,当单击频道时,由.setIntent(intent)
在new PreviewProgram.Builder()
上设置的原始意图由于任何原因都会被覆盖或丢失。
我唯一要做的是将(电影/频道)的ID与意图的Uri
包括在内。
因此,不要通过
传递对象.setIntentUri(Uri.parse(SCHEME + "://" + APPS_LAUNCH_HOST + "/" + PLAY_VIDEO_ACTION_PATH + "/" + movie))
只需将movieID发送为valueType
int movieID;
.setIntentUri(Uri.parse(SCHEME + "://" + APPS_LAUNCH_HOST + "/" + PLAY_VIDEO_ACTION_PATH + "/" + movieID))
要在新打开的活动中提取ID,请执行以下操作:
String videoId = getVideoID(getIntent().getData());
/**
* This is the helper function to extract the videoId (an unique id which will not be
* changed along with the transaction)
*/
private String getVideoID(Uri uri) {
List<String> paths = uri.getPathSegments();
if (paths.size() == 2 && TextUtils.equals(paths.get(0), PLAY_VIDEO_ACTION_PATH)) {
return paths.get(1);
}
return null;
}
很明显,如果我能像往常一样直接将对象发送到活动,那就更好了。