diff --git a/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/MyAdapter.java b/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/MyAdapter.java new file mode 100644 index 00000000..39abaf7f --- /dev/null +++ b/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/MyAdapter.java @@ -0,0 +1,84 @@ +package edu.hzuapps.androidlab.Net1414080903118; + +import android.content.Context; +import android.graphics.BitmapFactory; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.example.administrator.video.R; + +import java.io.File; +import java.util.List; + +/** + * Created by Administrator on 2017/5/7. + */ + +public class MyAdapter extends BaseAdapter { + + Context context; + List list; + + public MyAdapter(Context context, List list) { + this.context = context; + this.list = list; + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int position) { + return list.get(position).getPath(); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder = null; + if (convertView == null) { + convertView = LayoutInflater.from(context).inflate(R.layout.menu_item, null); + holder = new Holder(); + holder.iv = (ImageView) convertView.findViewById(R.id.iv_item); + holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_item_title); + holder.tvDuration = (TextView) convertView.findViewById(R.id.tv_item_duration); + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + holder.tvTitle.setText(list.get(position).getTitle()); + long duration = Long.parseLong(list.get(position).getDuration()); + duration = duration / 1000; + StringBuilder builder = new StringBuilder("时长:"); + int hour = (int) (duration / 3600); + builder.append(hour).append("时"); + int minuter = (int) ((duration % 3600) / 60); + builder.append(minuter).append("分"); + int second = (int) (duration % 60); + builder.append(second).append("秒"); + holder.tvDuration.setText(builder.toString()); + if(list.get(position).getThumbPath()!=null){ + File file = new File(list.get(position).getThumbPath()); + holder.iv.setImageBitmap(BitmapFactory.decodeFile(file.getAbsolutePath())); + } + return convertView; + } + + private class Holder { + TextView tvTitle; + TextView tvDuration; + ImageView iv; + } + +} diff --git a/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/Net1414080903118MainActivity.java b/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/Net1414080903118MainActivity.java new file mode 100644 index 00000000..3a2f87cd --- /dev/null +++ b/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/Net1414080903118MainActivity.java @@ -0,0 +1,102 @@ +package edu.hzuapps.androidlab.Net1414080903118; + +import android.content.Intent; +import android.database.Cursor; +import android.provider.MediaStore; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; + +import com.example.administrator.video.R; + +import java.util.ArrayList; +import java.util.List; + +public class Net1414080903118MainActivity extends AppCompatActivity { + + private static final String TAG = "MainActivity"; + Cursor cursor; + ListView lv; + + public List sysVideoList = new ArrayList<>(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_net1414809003118_main); + lv= (ListView) findViewById(R.id.lv); + setVideoList(); + final MyAdapter adapter=new MyAdapter(this,sysVideoList); + lv.setAdapter(adapter); + lv.setEmptyView(LayoutInflater.from(this).inflate(R.layout.empty_list,null)); + lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent=new Intent(Net1414080903118MainActivity.this,Net1414080903118PlayActivity.class); + intent.putExtra("path",(String)adapter.getItem(position)); + startActivity(intent); + } + }); + } + + private void setVideoList() { + // MediaStore.Video.Thumbnails.DATA:视频缩略图的文件路径 + String[] thumbColumns = {MediaStore.Video.Thumbnails.DATA, + MediaStore.Video.Thumbnails.VIDEO_ID}; + + // MediaStore.Video.Media.DATA:视频文件路径; + // MediaStore.Video.Media.DISPLAY_NAME : 视频文件名,如 testVideo.mp4 + // MediaStore.Video.Media.TITLE: 视频标题 : testVideo + String[] mediaColumns = {MediaStore.Video.Media._ID, + MediaStore.Video.Media.DATA, MediaStore.Video.Media.TITLE, + MediaStore.Video.Media.MIME_TYPE, + MediaStore.Video.Media.DURATION, + MediaStore.Video.Media.DISPLAY_NAME}; + + cursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, + mediaColumns, null, null, null); + + if (cursor == null) { + Toast.makeText(Net1414080903118MainActivity.this, "没有找到可播放视频文件", Toast.LENGTH_LONG).show(); + return; + } + if (cursor.moveToFirst()) { + do { + VideoInfo info = new VideoInfo(); + int id = cursor.getInt(cursor + .getColumnIndex(MediaStore.Video.Media._ID)); + Cursor thumbCursor = managedQuery( + MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, + thumbColumns, MediaStore.Video.Thumbnails.VIDEO_ID + + "=" + id, null, null); + if (thumbCursor.moveToFirst()) { + info.setThumbPath(thumbCursor.getString(thumbCursor + .getColumnIndex(MediaStore.Video.Thumbnails.DATA))); + } + info.setPath(cursor.getString(cursor + .getColumnIndexOrThrow(MediaStore.Video.Media.DATA))); + info.setTitle(cursor.getString(cursor + .getColumnIndexOrThrow(MediaStore.Video.Media.TITLE))); + info.setDisplayName(cursor.getString(cursor + .getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME))); + info.setDuration(cursor.getString(cursor + .getColumnIndexOrThrow(MediaStore.Video.Media.DURATION))); + Log.d(TAG, "DisplayName:" + info.getDisplayName()); + info.setMimeType(cursor + .getString(cursor + .getColumnIndexOrThrow(MediaStore.Video.Media.MIME_TYPE))); + String displayName=info.getDisplayName(); + String s=displayName.substring(displayName.indexOf(".")+1); + if(s.equals("mp4")||s.equals("3pg")) + sysVideoList.add(info); + } while (cursor.moveToNext()); + } + } + +} diff --git a/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/Net1414080903118PlayActivity.java b/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/Net1414080903118PlayActivity.java new file mode 100644 index 00000000..6ddbfdd2 --- /dev/null +++ b/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/Net1414080903118PlayActivity.java @@ -0,0 +1,54 @@ +package edu.hzuapps.androidlab.Net1414080903118; + +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.MediaController; +import android.widget.VideoView; + +import com.example.administrator.video.R; + +import java.io.File; + +public class Net1414080903118PlayActivity extends AppCompatActivity { + + VideoView videoView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_net1414080903118_play); + getSupportActionBar().hide(); + String path= getIntent().getStringExtra("path"); + videoView= (VideoView) findViewById(R.id.video); + File file=new File(path); + Log.d("path",file.getAbsolutePath()); + videoView.setVideoPath(file.getAbsolutePath()); + MediaController mediaController=new MediaController(this); + mediaController.setMediaPlayer(videoView); + videoView.setMediaController(mediaController); + if(!videoView.isPlaying()){ + videoView.start(); + } + } + + @Override + protected void onResume() { + super.onResume(); + if(getRequestedOrientation()!= ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if(videoView!=null){ + videoView.suspend(); + } + } +} diff --git a/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/VideoInfo.java b/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/VideoInfo.java new file mode 100644 index 00000000..3e3e1cfe --- /dev/null +++ b/AndroidLabs/app/src/main/java/edu/hzuapps/androidlabs/homeworks/net1414080903118/VideoInfo.java @@ -0,0 +1,67 @@ +package edu.hzuapps.androidlab.Net1414080903118; + +/** + * Created by Administrator on 2017/5/7. + */ +public class VideoInfo { + + String thumbPath; + String path; + String title; + String mimeType; + String displayName; + String duration; + + public String getDuration() { + return duration; + } + + public void setDuration(String duration) { + this.duration = duration; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getMimeType() { + return mimeType; + } + + public void setMimeType(String mimeType) { + this.mimeType = mimeType; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getThumbPath() { + return thumbPath; + } + + public void setThumbPath(String thumbPath) { + this.thumbPath = thumbPath; + } + + @Override + public String toString() { + return thumbPath+"-"+path+"-"+title+"-"+mimeType+"-"+displayName+"\n"; + } +} diff --git a/AndroidLabs/app/src/main/res/layout/activity_net1414080903118_play.xml b/AndroidLabs/app/src/main/res/layout/activity_net1414080903118_play.xml new file mode 100644 index 00000000..b5942096 --- /dev/null +++ b/AndroidLabs/app/src/main/res/layout/activity_net1414080903118_play.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/AndroidLabs/app/src/main/res/layout/activity_net1414809003118_main.xml b/AndroidLabs/app/src/main/res/layout/activity_net1414809003118_main.xml new file mode 100644 index 00000000..45ac7f70 --- /dev/null +++ b/AndroidLabs/app/src/main/res/layout/activity_net1414809003118_main.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/AndroidLabs/app/src/main/res/layout/empty_list.xml b/AndroidLabs/app/src/main/res/layout/empty_list.xml new file mode 100644 index 00000000..491a8dfd --- /dev/null +++ b/AndroidLabs/app/src/main/res/layout/empty_list.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/AndroidLabs/app/src/main/res/layout/menu_item.xml b/AndroidLabs/app/src/main/res/layout/menu_item.xml new file mode 100644 index 00000000..38a711c4 --- /dev/null +++ b/AndroidLabs/app/src/main/res/layout/menu_item.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + \ No newline at end of file