androidTv获取TvProvider频道数据,播放Dvb的视频

1 篇文章 0 订阅
1 篇文章 0 订阅

添加权限

<uses-permission android:name="android.permission.READ_TV_LISTINGS" />

添加这个权限之后需要手动前往系统设置 > 设置 > 应用 > app > 权限 > 开启读取所有电视节目频道权限,否则不能成功读取数据
原因:在官方文档中这个permission的 protectionLevel 是 “dangerous”,所以需要手动去开启
官网链接:https://cs.android.com/android/platform/superproject/+/master:packages/providers/TvProvider/AndroidManifest.xml;l=23-26

com.android.providers.tv.permission.READ_EPG_DATA
com.android.providers.tv.permission.WRITE_EPG_DATA
这两个权限是在自己实现一个TvInputInfo时需要用到的,只能读取与写入自己的数据

所以这个是第三方app唯一能够读取所有TvProvider数据库中数据的权限
接着就可以使用ContentResolver去获取数据了

获取数据:

Cursor cursor = context.getContentResolver().query(TvContract.Channels.CONTENT_URI, null, null, null, null, null);
String[] columnNames = cursor.getColumnNames();
for (String columnName : columnNames) {
	try{
		String value = cursor.getString(cursor.getColumnIndex(columnName));
		Log.d(TAG, "queryChannel:columnName:" + columnName + " --- value:" + value);
	}catch (Exception e){
		byte[] value = cursor.getBlob(cursor.getColumnIndex(columnName));
		Log.d(TAG, "queryChannel:columnName:" + columnName + " --- value:" + value);
	}               
}

这里try一下是因为在TvProvider中的节目视频数据是存放在
TvContract.Channels.COLUMN_INTERNAL_PROVIDER_DATA
这个Key中,value是byte类型

这个TvContract.Channels.COLUMN_INTERNAL_PROVIDER_DATA中的数据是由系统开发者定义的,按照官方的源码是可以通过

JSONObject json = new JSONObject(new String(value))

获取到当前频道的节目信息,也不一定能够成功,这个看系统了

播放TvProvider中的视频

TvView tvView = new TvView(context);
tvView.reset();
tvView.tune(input_id, _id);

参数:

input_id: 根据数据库查询到的 input_id
_id:数据库中的_id

到此就能实现播放了

也能够通过

TvInputManager tvInputManager = (TvInputManager) getSystemService(TV_INPUT_SERVICE);
List<TvInputInfo> tvInputList = tvInputManager.getTvInputList();
for (TvInputInfo tvInputInfo : tvInputList) {
	 Log.d(TAG, "onCreate: " + tvInputInfo.getId());
}

的方式获取到Tv上面的所有输入源input_id

一个TvInputInfo代表一个输入源,一个电视接口也代表一个输入源,例如Dvb接口,hdmi接口,第三方app也能够开发TvInputInfo

可以通过adb logcat -v -time > log.txt 的方式查看日志来确定你的电视dvb接口或者HDMI接口的input_id是什么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值