中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中獲取手機支持的硬件解碼器類型以及對應的解碼器名稱

發布時間:2020-07-15 11:40:39 來源:網絡 閱讀:2117 作者:辰月之征 欄目:移動開發

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安丘市| 且末县| 宣城市| 封开县| 黔江区| 古丈县| 塘沽区| 雷山县| 宁波市| 三原县| 安义县| 大荔县| 宿迁市| 罗田县| 榆中县| 海盐县| 资中县| 开远市| 游戏| 平陆县| 丰城市| 会同县| 新兴县| 黄陵县| 榆林市| 仁化县| 安仁县| 万安县| 扬中市| 涿鹿县| 西藏| 得荣县| 威海市| 临海市| 泽州县| 曲松县| 宣城市| 阿勒泰市| 夏津县| 岐山县| 溧阳市|