Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 手機影音3--本地視頻列表,影音3--列表

手機影音3--本地視頻列表,影音3--列表

編輯:關於android開發

手機影音3--本地視頻列表,影音3--列表


1.寫布局 相對布局 : ListView和TextView和ProgressBar,初始化

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5 
 6     <ListView
 7         android:divider="@null"
 8         android:id="@+id/listview"
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent" />
11 
12     <TextView
13         android:id="@+id/tv_nomedia"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:layout_centerInParent="true"
17         android:text="沒有發現視頻..."
18         android:textColor="#000000"
19         android:textSize="18sp"
20         android:visibility="gone" />
21 
22     <ProgressBar
23         android:id="@+id/pb_loading"
24         android:layout_width="wrap_content"
25         android:layout_height="wrap_content"
26         android:layout_centerInParent="true"
27         />
28 
29 </RelativeLayout>
video_pager.xml

 

2.加載本地的視頻,在子線程中加載視頻,加載的視頻放入集合中; 設置適配器要在主線程;用Handler,設置適配器

  1 public class VideoPager extends BasePager {
  2 
  3     private ListView listview;
  4     private TextView tv_nomedia;
  5     private ProgressBar pb_loading;
  6 
  7 
  8     private VideoPagerAdapter videoPagerAdapter;
  9 
 10     /**
 11      * 裝數據集合
 12      */
 13     private ArrayList<MediaItem> mediaItems;
 14 
 15 
 16     public VideoPager(Context context) {
 17         super(context);
 18 
 19     }
 20 
 21     private Handler handler = new Handler(){
 22         @Override
 23         public void handleMessage(Message msg) {
 24             super.handleMessage(msg);
 25             if(mediaItems != null && mediaItems.size() >0){
 26                 //有數據
 27                 //設置適配器
 28                 videoPagerAdapter = new VideoPagerAdapter(context,mediaItems,true);
 29                 listview.setAdapter(videoPagerAdapter);
 30                 //把文本隱藏
 31                 tv_nomedia.setVisibility(View.GONE);
 32             }else{
 33                 //沒有數據
 34                 //文本顯示
 35                 tv_nomedia.setVisibility(View.VISIBLE);
 36             }
 37 
 38 
 39             //ProgressBar隱藏
 40             pb_loading.setVisibility(View.GONE);
 41         }
 42     };
 43 
 44     /**
 45      * 初始化當前頁面的控件,由父類調用
 46      * @return
 47      */
 48     @Override
 49     public View initView() {
 50         View view = View.inflate(context, R.layout.video_pager,null);
 51         listview = (ListView) view.findViewById(R.id.listview);
 52         tv_nomedia = (TextView) view.findViewById(R.id.tv_nomedia);
 53         pb_loading = (ProgressBar) view.findViewById(R.id.pb_loading);
 54         //設置ListView的Item的點擊事件
 55         listview.setOnItemClickListener(new MyOnItemClickListener());
 56         return view;
 57     }
 58 
 59     class MyOnItemClickListener implements AdapterView.OnItemClickListener {
 60 
 61         @Override
 62         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 63 
 64             MediaItem mediaItem = mediaItems.get(position);
 65 //            Toast.makeText(context, "mediaItem=="+mediaItem.toString(), Toast.LENGTH_SHORT).show();
 66 
 67             //1.調起系統所有的播放-隱式意圖
 68 //            Intent intent = new Intent();
 69 //            intent.setDataAndType(Uri.parse(mediaItem.getData()),"video/*");
 70 //            context.startActivity(intent);
 71 
 72             //2.調用自己寫的播放器-顯示意圖--一個播放地址
 73 //            Intent intent = new Intent(context,SystemVideoPlayer.class);
 74 //            intent.setDataAndType(Uri.parse(mediaItem.getData()),"video/*");
 75 //            context.startActivity(intent);
 76             //3.傳遞列表數據-對象-序列化
 77             Intent intent = new Intent(context,SystemVideoPlayer.class);
 78             Bundle bundle = new Bundle();
 79             bundle.putSerializable("videolist",mediaItems);
 80             intent.putExtras(bundle);
 81             intent.putExtra("position",position);
 82             context.startActivity(intent);
 83 
 84         }
 85     }
 86 
 87 
 88     @Override
 89     public void initData() {
 90         super.initData();
 91         LogUtil.e("本地視頻的數據被初始化了。。。");
 92         //加載本地視頻數據
 93         getDataFromLocal();
 94     }
 95 
 96     /**
 97      * 從本地的sdcard得到數據
 98      * //1.遍歷sdcard,後綴名
 99      * //2.從內容提供者裡面獲取視頻
100      * //3.如果是6.0的系統,動態獲取讀取sdcard的權限
101      */
102     private void getDataFromLocal() {
103 
104         new Thread(){
105             @Override
106             public void run() {
107                 super.run();
108 
109 //                isGrantExternalRW((Activity) context);
110 //                SystemClock.sleep(2000);
111                 mediaItems = new ArrayList<>();
112                 ContentResolver resolver = context.getContentResolver();
113                 Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
114                 String[] objs = {
115                         MediaStore.Video.Media.DISPLAY_NAME,//視頻文件在sdcard的名稱
116                         MediaStore.Video.Media.DURATION,//視頻總時長
117                         MediaStore.Video.Media.SIZE,//視頻的文件大小
118                         MediaStore.Video.Media.DATA,//視頻的絕對地址
119                         MediaStore.Video.Media.ARTIST,//歌曲的演唱者
120 
121                 };
122                 Cursor cursor = resolver.query(uri, objs, null, null, null);
123                 if(cursor != null){
124                     while (cursor.moveToNext()){
125 
126                         MediaItem mediaItem = new MediaItem();
127 
128                         mediaItems.add(mediaItem);//寫在上面
129 
130                         String name = cursor.getString(0);//視頻的名稱
131                         mediaItem.setName(name);
132 
133                         long duration = cursor.getLong(1);//視頻的時長
134                         mediaItem.setDuration(duration);
135 
136                         long size = cursor.getLong(2);//視頻的文件大小
137                         mediaItem.setSize(size);
138 
139                         String data = cursor.getString(3);//視頻的播放地址
140                         mediaItem.setData(data);
141 
142                         String artist = cursor.getString(4);//藝術家
143                         mediaItem.setArtist(artist);
144                     }
145 
146                     cursor.close();
147                 }
148 
149                 //Handler發消息
150                 handler.sendEmptyMessage(10);
151             }
152         }.start();
153 
154     }
155 
156     /**
157      * 解決安卓6.0以上版本不能讀取外部存儲權限的問題
158      * @param activity
159      * @return
160      */
161     public static boolean isGrantExternalRW(Activity activity) {
162         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && activity.checkSelfPermission(
163                 Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
164 
165             activity.requestPermissions(new String[]{
166                     Manifest.permission.READ_EXTERNAL_STORAGE,
167                     Manifest.permission.WRITE_EXTERNAL_STORAGE
168             }, 1);
169 
170             return false;
171         }
172 
173         return true;
174     }
175 
176 }
VideoPager.java

 

3.設置item的點擊事件,把視頻播放出來

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved