Android中获取手机支持的硬件解码器类型以及对应的解码器名称
最近在做播放器项目,由于Android兼容性问题,硬解各种不兼容搞得项目组成员焦头烂额,为了方便测试分析,我做了个小工具,来测试不同的Android手机支持的×××格式以及×××名称。为防止,以后遗忘,在这里写篇博客记录之。
专注于为中小企业提供网站设计制作、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业长丰免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
MainActivity代码:
@SuppressLint("NewApi")
public class MainActivity extends Activity implements OnClickListener {
private ListView decoder
List;
private ArrayList
@Override
protected 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);
}
@Override
public 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
for (int i = 0; i < numCodecs; i++) {
MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
map = new HashMap
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
private Context context;
public DecodeListAdapter(Context context,
ArrayList
this.context = context;
this.decodeList = decodeList;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return decodeList.size();
}
@Override
public HashMap getItem(int position) {
// TODO Auto-generated method stub
return decodeList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
HashMap
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代码:
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" >
decode_list_item.xml代码:
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" > android:id="@+id/decoderName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:gravity="center" android:text="开始检测" /> android:id="@+id/decoderType" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.0" android:gravity="center" />
分享文章:Android中获取手机支持的硬件解码器类型以及对应的解码器名称
文章转载:http://cdiso.cn/article/pgogci.html