第一步,MainActivity.class类代码 如下:

package com.learn.lister.systemvediorecord;import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.ThumbnailUtils;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.support.v4.BuildConfig;
import android.support.v4.content.FileProvider;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;import java.io.File;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends Activity implements OnItemClickListener {private static final String TAG = "MainActivity";//自己本地文件保存路径//private String video_path = "/storage/emulated/0/Camera/";String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/XiaoGou/";private List<Picture> listPictures;ListView listView;GridView mGridView;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);if (msg.what == 0) {List<Picture> listPictures = (List<Picture>) msg.obj;MyAdapter adapter = new MyAdapter(listPictures);mGridView.setAdapter(adapter);}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);loadVaule();}private void loadVaule() {File file = new File(video_path);//判断文件夹是否存在,如果不存在就创建一个if (!file.exists()) {file.mkdirs();}File[] files = file.listFiles();listPictures = new ArrayList<Picture>();for (int i = 0; i < files.length; i++) {Picture picture = new Picture();picture.setBitmap(getVideoThumbnail(files[i].getPath(), 200, 200, MediaStore.Images.Thumbnails.MICRO_KIND));picture.setPath(files[i].getPath());picture.setName(files[i].getName());listPictures.add(picture);}// listView = (ListView) findViewById(R.id.lv_show);mGridView = (GridView) findViewById(R.id.gridView);mGridView.setOnItemClickListener(this);Message msg = new Message();msg.what = 0;msg.obj = listPictures;handler.sendMessage(msg);}//获取视频的缩略图private Bitmap getVideoThumbnail(String videoPath, int width, int height, int kind) {Bitmap bitmap = null;// 获取视频的缩略图bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind);
//            System.out.println("w"+bitmap.getWidth());
//            System.out.println("h"+bitmap.getHeight());bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);return bitmap;}public class MyAdapter extends BaseAdapter {private List<Picture> listPictures;public MyAdapter(List<Picture> listPictures) {super();this.listPictures = listPictures;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn listPictures.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn listPictures.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View v, ViewGroup arg2) {// TODO Auto-generated method stuView view = getLayoutInflater().inflate(R.layout.item, null);ImageView imageView = (ImageView) view.findViewById(R.id.iv_show);TextView textView = (TextView) view.findViewById(R.id.tv_show);imageView.setImageBitmap(listPictures.get(position).getBitmap());//textView.setText(listPictures.get(position).getPath());textView.setText(listPictures.get(position).getName());return view;}}@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {// TODO Auto-generated method stubplayVideo(listPictures.get(arg2).getPath());Log.e("path", listPictures.get(arg2).getPath());}//调用系统播放器   播放视频private void playVideo(String videoPath) {
//                Intent intent = new Intent(Intent.ACTION_VIEW);
//                String strend="";
//                if(videoPath.toLowerCase().endsWith(".mp4")){
//                   strend="mp4";
//                }
//                else if(videoPath.toLowerCase().endsWith(".3gp")){
//                   strend="3gp";
//                }
//                else if(videoPath.toLowerCase().endsWith(".mov")){
//                   strend="mov";
//                }
//                else if(videoPath.toLowerCase().endsWith(".avi")){
//                   strend="avi";
//                }
//                intent.setDataAndType(Uri.parse(videoPath), "video/*");
//                startActivity(intent);Intent intent = new Intent(Intent.ACTION_VIEW);//判断是否是AndroidN以及更高的版本if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {Uri contentUri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID +".fileProvider", file);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.setDataAndType(contentUri, "video/*");} else {intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setDataAndType(Uri.fromFile(file), "video/*");}startActivity(intent);}
}

第二步:activity_main.xml文件代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns: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"tools:context="com.learn.lister.systemvediorecord.MainActivity"><GridViewandroid:id="@+id/gridView"android:layout_marginTop="10dp"android:numColumns="2"android:horizontalSpacing="10dp"android:verticalSpacing="10dp"android:layout_width="wrap_content"android:layout_height="wrap_content"></GridView></LinearLayout>

第三步:在res目录下创建一个名为 xml 文件夹,在文件中创建一个名为 file_paths.xml 文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<paths><!--Android/data/包名/--><external-path path="Android/data/com.learn.lister.systemvediorecord/" name="files_root"/><external-path path="." name="com.learn.lister.systemvediorecord" />
</paths>

第四步:在AndroidManifest.xml文件中添加权限,

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在 application标签下添加如下代码:

<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="com.learn.lister.systemvediorecord.fileProvider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths"/>
</provider>

注意:上面权限只是读写权限,如果没有反应或有问题,请查看手机设置程序权限是否打开

附加:手动申请打开权限代码

//读写文件权限申请
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// 判断是否有这个权限,是返回PackageManager.PERMISSION_GRANTED,否则是PERMISSION_DENIED// 这里我们要给应用授权所以是!= PackageManager.PERMISSION_GRANTEDif (ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {// 如果应用之前请求过此权限但用户拒绝了请求,且没有选择"不再提醒"选项 (后显示对话框解释为啥要这个权限),此方法将返回 true。if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)) {} else {// requestPermissions以标准对话框形式请求权限。123是识别码(任意设置的整型),用来识别权限。应用无法配置或更改此对话框。//当应用请求权限时,系统将向用户显示一个对话框。当用户响应时,系统将调用应用的 onRequestPermissionsResult() 方法,向其传递用户响应。您的应用必须替换该方法,以了解是否已获得相应权限。回调会将您传递的相同请求代码传递给 requestPermissions().ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},123);}}
} else {
}
@Override
public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {switch (requestCode) {case 123: {// If request is cancelled, the result arrays are empty.if (grantResults.length > 0&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {//这里的两句语句是我写的创建文件的语句,在授权成功是时候会调用这里的语句。// permission was granted, yay! Do the// contacts-related task you need to do.} else {}return;}}
}

源码下载地址 : https://download.csdn.net/download/qq_20212147/10918688

android 根据指定路径获取本地视频列表显示,点击缩略图调用系统播放器进行播放相关推荐

  1. 【Android开发】 获取本地视频封面

    获取本地视频封面 或许你遇到这样的场景,想做一个视频播放器,视频在播放之前展示一个封面图,想截取某一帧/第一帧作为封面图.要实现这个功能,只需要使用 Android 系统 api 提供的 MediaM ...

  2. 【Android 获取本地视频+视频剪裁+视频录制】

    效果图如下: 获取本地视频 关键代码: /*** 重要说明:* <p>* 疑问一:* 该方法,查到的 视频路径 和 视频的缩略图 是一样的,并且格式都是 .mp4 .视频的缩略图应该是 . ...

  3. 如何获取网络视频(或者说后台返回视频URL)第一帧图片以及获取本地视频的第一帧图片

    在项目开发的时候,有可能会有这样的一种需求:有一段视频需要展示给用户,在界面上先展示视频上的某一帧图片,用户点击的时候再去获取视频资源进行播放.这时,服务器会先给我们返回视频的url,这个时候就需要通 ...

  4. android调用文件管理打开某个路径,安卓 通过intent调用系统文件管理器打开指定路径目录...

    当我们知道一个文件的路径,如何调用系统文件管理器显示它的位置呢. 代码: private void openAssignFolder(String path){ File file = new Fil ...

  5. Android 使用JS注入获取网页视频链接

    Android 使用JS注入获取网页视频链接 思路: 1.通过js注入获取整个网页html. 2.通过jsoup分析获取video播放器的数据源. 一.开启webviewjs功能,注入js回调 mWe ...

  6. android根据音乐路径获取音乐时长,采样率等

    android根据音乐路径获取音乐时长,采样率等 git路径为:https://github.com/zhangliangming/HPAudio Gradle 1.root build.gradle ...

  7. 安卓 通过intent调用系统文件管理器打开指定路径目录

    安卓 通过intent调用系统文件管理器打开指定路径目录   转  https://blog.csdn.net/qq_34161388/article/details/78586247 当我们知道一个 ...

  8. Android中调用系统已安装的播放器来播放网络流媒体视频

    2019独角兽企业重金招聘Python工程师标准>>> 实现思路比较简单几行代码就可以搞定,在界面放一个Button或者带有播放图标的imageview,点击事件中调用本地播放器来播 ...

  9. 自学Java语言网络编程局域网内与电脑无线传输视频,图片文件,调用系统媒体播放视频图片文件

    先看看电脑上的效果,可以查看磁盘下的文件,可以用鼠标双击MP4,MP3文件会调用系统播放器进行播放,电脑与手机同局域网内无线互传jpg图片与MP4视频文件,其他文件此代码不支持.下面有安卓上的逻辑代码 ...

最新文章

  1. Ruby Metaprogramming
  2. sklearn综合示例3:逻辑回归
  3. dcc garch matlab,如何用Eviews或者MATLAB实现DCC-garch模型?
  4. python: 爬取[博海拾贝]图片脚本
  5. php获取网页js中的json,从php获取json数据使用js读取显示到网页笔记
  6. Eclipse在更换工作空间之后很多设置要重新配置
  7. [APEC中小企业峰会2009上]成功企业 = 理想主义 + 现实主义
  8. 减少SQL Server ASYNC_NETWORK_IO等待类型
  9. php-redis常用操作
  10. 村长选举c语言程序,大村长-第一章 选举-爱阅小说网
  11. 搭建公众号微商城+小程序微商城 企业商城系统一条龙 拖拽可视化装修模板
  12. 常见机器视觉软件OpenCV/Halcon/VisionPro/MIL的区别
  13. 柠檬班性能测试day3_性能测试基础知识(0521)
  14. 7个银行的软件测试项目实战,别再说简历项目不知道怎么写了
  15. 【FPGA】SPI协议
  16. 1617: Special Formation - 规律题
  17. 【水题】跑跑卡丁车系列之游戏下载
  18. 深耕细作Or产品矩阵——成熟期篇
  19. Softmax 函数和它的误解
  20. 星空电影院 v6.08 bt

热门文章

  1. 网络俄罗斯方块对战游戏For FICQ
  2. 个人网盘2T资料整理分享(持续更新中)
  3. 如何快速的学好英语(Aprial)
  4. Android--仿爱奇艺 首页轮播图
  5. 【实习面试】阿里腾讯offer的点点滴滴(内附干货)
  6. 将网页内容保存为本地html方便解析
  7. Autowares使用(3)——模拟定位与真实定位
  8. word按目标文档格式进行快捷键粘贴
  9. 失落城堡读取服务器信息,失落城堡新手注意基本篇_失落城堡基础知识讲解_游戏堡...
  10. 基于javaweb+jsp的饮食营养健康管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax)