最近在做播放器项目,由于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>>();
@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<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;
}
@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<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" >
<Button
android:id="@+id/retrieve"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="开始检测" />
<ListView
android: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" >
<TextView
android:id="@+id/decoderName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:gravity="center"
android:text="开始检测" />
<TextView
android:id="@+id/decoderType"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1.0"
android:gravity="center" />
</LinearLayout>
转载于:https://blog.51cto.com/marller/1751139