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

來源:互聯網
上載者:User

手機影音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     <TextView13         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     <ProgressBar23         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             @Override106             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 activity159      * @return160      */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_STORAGE168             }, 1);169 170             return false;171         }172 173         return true;174     }175 176 }
VideoPager.java

 

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.