Android中获取手机支持的硬件解码器类型以及对应的解码器名称
2016-03-15 09:49
477 查看
最近在做播放器项目,由于Android兼容性问题,硬解各种不兼容搞得项目组成员焦头烂额,为了方便测试分析,我做了个小工具,来测试不同的Android手机支持的解码器格式以及解码器名称。为防止,以后遗忘,在这里写篇博客记录之。MainActivity代码:@SuppressLint("NewApi")public class MainActivity extends Activity implements OnClickListener {private ListView decoderList;private ArrayList<HashMap<String, String>> datas = new ArrayList<HashMap<String, String>>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button retrieve = (Button) findViewById(R.id.retrieve);retrieve.setOnClickListener(this);decoderList = (ListView) findViewById(R.id.decoderList);}@Overridepublic void onClick(View v) {// MediaCodecInfo mediaCodecInfo = getSupportDecoder(// MediaFormat.MIMETYPE_VIDEO_VP8, (Button) v);getSupportDecoder((Button) v);}private MediaCodecInfo getSupportDecoder(Button button) { button.setText("正在检测..."); int numCodecs = MediaCodecList.getCodecCount(); HashMap<String, String> map; for (int i = 0; i < numCodecs; i++) { MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i); map = new HashMap<String, String>(); if (!codecInfo.isEncoder()) { continue; } map.put("decoderName", codecInfo.getName()); String[] types = codecInfo.getSupportedTypes(); for (int j = 0; j < types.length; j++) { if (map.containsValue(types[j])) { continue; } else { map.put("decoderType", types[j]); } } datas.add(map); } decoderList.setAdapter(new DecodeListAdapter(this, datas)); decoderList.setVisibility(View.VISIBLE); button.setText("开始检测"); return null; }}斜体加粗部分是核心函数。ListView适配器:public class DecodeListAdapter extends BaseAdapter {private ArrayList<HashMap<String, String>> decodeList;private Context context;public DecodeListAdapter(Context context,ArrayList<HashMap<String, String>> decodeList) {this.context = context;this.decodeList = decodeList;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn decodeList.size();}@Overridepublic HashMap getItem(int position) {// TODO Auto-generated method stubreturn decodeList.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {HashMap<String, String> map = getItem(position);ViewHolder vh = null;if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.decode_list_item, null);vh = new ViewHolder();vh.decoderName = (TextView) convertView.findViewById(R.id.decoderName);vh.decoderType = (TextView) convertView.findViewById(R.id.decoderType);convertView.setTag(vh);} else {vh = (ViewHolder) convertView.getTag();}if (position == 0) {vh.decoderName.setText("解码器名称");vh.decoderType.setText("解码器类型");} else {vh.decoderName.setText(map.get("decoderName"));vh.decoderType.setText(map.get("decoderType"));}return convertView;}private class ViewHolder {TextView decoderName;TextView decoderType;}}activity_main.xml代码:<LinearLayout 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"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.marller.decoderlist.MainActivity" ><Buttonandroid:id="@+id/retrieve"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="开始检测" /><ListViewandroid:id="@+id/decoderList"android:layout_width="match_parent"android:layout_height="match_parent"android:cacheColorHint="#00000000"android:visibility="gone" /></LinearLayout>decode_list_item.xml代码:<LinearLayout 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"android:orientation="horizontal"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.marller.decoderlist.MainActivity" ><TextViewandroid:id="@+id/decoderName"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1.0"android:gravity="center"android:text="开始检测" /><TextViewandroid:id="@+id/decoderType"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1.0"android:gravity="center" /></LinearLayout>本文出自 “西城天部” 博客,请务必保留此出处http://marller.blog.51cto.com/8699646/1751139
相关文章推荐
- 从零开始的Android新项目2 - Gradle篇
- android客户端多文件上传(最简单和强悍版本),一看就懂
- Android 如何在service和BroadCastReceiver中 启动activity和alertdialog?
- Android 判断应用是否在运行以及判断处于顶层的activity
- android 禁止通知栏下拉
- 2016年3月15日Android实习日记
- Ecplise 更新代码出错:Description Resource Path Location Type The container 'Android Dependencies'
- 【Gallery3D】播放视频时上下文菜单的设置
- Android - NetworkInfo对象的isConnected()与isAvailable()
- Android 通知栏Notification
- Android开发之动画效果浅析(一)
- Android动画效果——X、Y轴抖动
- android如何让控件摆放在屏幕底部
- Android将Log写入文件
- Android——配置环境变量
- Android N预览版 权限上的一些改变
- AndroidAlbum 跳转到相册或者调用系统拍照的功能
- Android中自定义控件之液位指示器
- Android性能优化典范(四) google 推出 mark
- Android——寄存器和存储器的区别