最近在做播放器项目,由于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>


更多相关文章

  1. 自定义View系列教程07--详解ViewGroup分发Touch事件
  2. Android跨进程通信 AIDL使用
  3. AndroidStudio使用教程(第一弹)
  4. Cocos2d-x C++调用Android弹出提示框
  5. 详解Android系统中的root权限获得原理
  6. Android(安卓)View Animation Example
  7. android apk 为程序增加代码混淆
  8. Android(安卓)基于Http协议的文件上传
  9. 在Ubuntu上下载、编译和安装Android最新源代码(转载)

随机推荐

  1. Android通过图片名字获得ID
  2. android 自定义View 对话框
  3. Android Http通信(使用 标准Java接口)及
  4. 联系人存储ContactsProvider表分析
  5. android中Json数据保存方式
  6. android xml属性的单位大全
  7. Android 开发之JNI学习笔记
  8. Android为HttpClient设置证书(用户名和密
  9. Android开发学习笔记整理(16)-网络请求
  10. [Android] ListView 结合SimpleAdapter使