您好,登錄后才能下訂單哦!
最近在做播放器項目,由于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>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。