MainActivity
package com.mirrorlacation.player; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.MediaStore; import android.text.format.Formatter; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; public class MainActivity extends Activity { private VedioBean vedioBean; private TextView no_player; private ListView playerlist; private ArrayList<VedioBean> playerData; private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { //有视频 if(null!=playerData&&playerData.size()>0){ no_player.setVisibility(View.GONE); playerlist.setAdapter(new DownAdapterter()); playerlist.setOnItemClickListener(itemclick); }else{ //无视频 no_player.setVisibility(View.VISIBLE); } } }; AdapterView.OnItemClickListener itemclick=new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String address= playerData.get(position).getData(); //把手机里的所有播放器调起来 // Intent intent=new Intent(); // intent.setAction(Intent.ACTION_VIEW); // intent.setDataAndType(Uri.parse(address),"video/*"); // startActivity(intent); //调用自己播放器 Intent intent=new Intent(MainActivity.this,VideoPlayerActivity.class); intent.setData(Uri.parse(address)); startActivity(intent); } }; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); indata(); } private void init() { no_player= (TextView) this.findViewById(R.id.no_player); playerlist = (ListView) this.findViewById(R.id.playerlist); } //扫描获取本地的视频 private void indata() { playerData=new ArrayList<VedioBean>(); new Thread(new Runnable() { @Override public void run() { //系统中 data/data/com.android.providers.media/databases下: // external.data(外部路径) internal.data(手机内部路径) //得到外部视频路径. Uri url= MediaStore.Video.Media.EXTERNAL_CONTENT_URI; String []projection={ MediaStore.Video.Media.DISPLAY_NAME,//视频的名字 MediaStore.Video.Media.DURATION, //视频的时长 MediaStore.Video.Media.SIZE, //视频的大小 MediaStore.Video.Media.DATA //视频在SDCard下的绝对路径 }; Cursor cursor=getContentResolver().query(url,projection,null,null,null); while(cursor.moveToNext()){ vedioBean= new VedioBean(); String name=cursor.getString(0); vedioBean.setName(name); long duration=cursor.getLong(1); vedioBean.setDuration(duration); long size=cursor.getLong(2); vedioBean.setSize(size); String data=cursor.getString(3); vedioBean.setData(data); playerData.add(vedioBean); } cursor.close(); handler.sendEmptyMessage(0); } }).start(); } class DownAdapterter extends BaseAdapter { @Override public int getCount() { return playerData.size(); } @Override public Object getItem(int position) { return playerData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHold viewHold; if(convertView==null){ viewHold=new ViewHold(); convertView=View.inflate(MainActivity.this,R.layout.plaeriten,null); viewHold.p_name= (TextView) convertView.findViewById(R.id.p_name); viewHold.p_size= (TextView) convertView.findViewById(R.id.p_size); viewHold.p_big= (TextView) convertView.findViewById(R.id.p_big); convertView.setTag(viewHold); }else{ viewHold= (ViewHold) convertView.getTag(); } final VedioBean msg=playerData.get(position); viewHold.p_name.setText(msg.getName()); //Formatter.formatFileSize Byte Kb Mb Gb自动转换 viewHold.p_big.setText(Formatter.formatFileSize(MainActivity.this,msg.getSize())); viewHold.p_size.setText(formatTime(msg.getDuration())); return convertView; } } static class ViewHold{ TextView p_name; TextView p_size; TextView p_big; } //毫秒转时间 public static String formatTime(Long ms) { Integer ss = 1000; Integer mi = ss * 60; Integer hh = mi * 60; Integer dd = hh * 24; Long day = ms / dd; Long hour = (ms - day * dd) / hh; Long minute = (ms - day * dd - hour * hh) / mi; Long second = (ms - day * dd - hour * hh - minute * mi) / ss; Long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss; StringBuffer sb = new StringBuffer(); if(day > 0) { sb.append(day+"天"); } if(hour > 0) { sb.append(hour+"小时"); } if(minute > 0) { sb.append(minute+"分"); } if(second > 0) { sb.append(second+"秒"); } if(milliSecond > 0) { sb.append(milliSecond+"毫秒"); } return sb.toString(); } }
VideoPlayerActivity
package com.mirrorlacation.player; import android.media.MediaPlayer; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Window; import android.widget.MediaController; import android.widget.Toast; import android.widget.VideoView; public class VideoPlayerActivity extends AppCompatActivity { private VideoView videoview; private Uri uri; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_video_player); videoview= (VideoView) findViewById(R.id.videoview); uri=getIntent().getData(); videoview.setVideoURI(uri); //播放准备 videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { videoview.start(); } }); videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { Toast.makeText(VideoPlayerActivity.this, "播放完成", Toast.LENGTH_SHORT).show(); VideoPlayerActivity.this.finish(); } }); videoview.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { Toast.makeText(VideoPlayerActivity.this, "播放错误", Toast.LENGTH_SHORT).show(); return true; } }); //控制面板 videoview.setMediaController(new MediaController(this)); } }
activity_main
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" tools:context="com.mirrorlacation.player.MainActivity"> <TextView android:id="@+id/no_player" android:textSize="20sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:visibility="gone" android:text="没有视频!"/> <ListView android:id="@+id/playerlist" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>activity_video_player.xml
<RelativeLayout 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:gravity="center" tools:context="com.mirrorlacation.player.VideoPlayerActivity"> <VideoView android:id="@+id/videoview" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>