您的位置:首页 > 移动开发 > Android开发

Android中获取手机支持的硬件解码器类型以及对应的解码器名称

2016-03-15 09:49 477 查看
最近在做播放器项目,由于Android兼容性问题,硬解各种不兼容搞得项目组成员焦头烂额,为了方便测试分析,我做了个小工具,来测试不同的Android手机支持的解码器格式以及解码器名称。为防止,以后遗忘,在这里写篇博客记录之。MainActivity代码:@SuppressLint("NewApi")public class MainActivity extends Activity implements OnClickListener {private ListView decoder
List;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
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: