热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

andriod之ContentProvider读取外部存储视屏

主显示布局以及代码:activity_main.xml:

主显示布局以及代码:

activity_main.xml:


    android:layout_width="match_parent"
    android:layout_height="match_parent" >


            android:id="@+id/gallery"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
<

VideoView
 
   android:id&#61;"&#64;&#43;id/vv"
   android:layout_below&#61;"&#64;id/gallery"
   android:layout_width&#61;"match_parent"
   android:layout_height&#61;"match_parent"/>

主Activity的java代码&#xff1a;

package com.sxt.day07_09;


import java.util.ArrayList;
import java.util.HashMap;


import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore.Video;
import android.provider.MediaStore.Video.Thumbnails;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.VideoView;


public class MainActivity extends Activity {
ArrayList> mVideos;
Gallery mGallery;//横向显示列表
VideoAdapter mAdapter;//适配器
VideoView mVideoView;//播放视屏的ui
&#64;Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getVideoInfo();
initView();
setListener();
}


private void setListener() {
mGallery.setOnItemClickListener(new OnItemClickListener() {


&#64;Override
public void onItemClick(AdapterView parent, View view,
int position, long id) {
HashMap video&#61;mVideos.get(position);
String path&#61;video.get(Video.Media.DATA).toString();
mVideoView.setVideoPath(path);
mVideoView.start();
}
});
}


private void initView() {
mVideoView&#61;(VideoView) findViewById(R.id.vv);
mGallery&#61;(Gallery) findViewById(R.id.gallery);
mAdapter&#61;new VideoAdapter(mVideos, this);
mGallery.setAdapter(mAdapter);
}


private void getVideoInfo() {
ContentResolver resolver &#61; getContentResolver();
String[] projection&#61;{
Video.Media._ID,
Video.Media.DATA,
Video.Media.TITLE
};
mVideos&#61;new ArrayList>();
Cursor c &#61; resolver.query(Video.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);
while(c.moveToNext()){
HashMap video&#61;new HashMap();
video.put(Video.Media._ID, c.getInt(c.getColumnIndex(Video.Media._ID)));
video.put(Video.Media.DATA, c.getString(c.getColumnIndex(Video.Media.DATA)));
video.put(Video.Media.TITLE, c.getString(c.getColumnIndex(Video.Media.TITLE)));
mVideos.add(video);
}
}


class VideoAdapter extends BaseAdapter{
ArrayList> videos;
Context context;

public VideoAdapter(ArrayList> videos,
Context context) {
super();
this.videos &#61; videos;
this.context &#61; context;
}


&#64;Override
public int getCount() {
return videos.size();
}


&#64;Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}


&#64;Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}


&#64;Override
public View getView(int position, View layout, ViewGroup parent) {
layout&#61;View.inflate(context, R.layout.item_video, null);
ImageView ivThumb&#61;(ImageView) layout.findViewById(R.id.ivThumb);
TextView tvTitle&#61;(TextView) layout.findViewById(R.id.tvTitle);
HashMap video&#61;videos.get(position);
tvTitle.setText(video.get(Video.Media.TITLE).toString());
int id&#61;(Integer) video.get(Video.Media._ID);
Bitmap bm&#61;Thumbnails.getThumbnail(getContentResolver(), id, Thumbnails.MICRO_KIND, null);
ivThumb.setImageBitmap(bm);
return layout;
}
}
}

适配的布局&#xff1a;item_video.xml


    android:layout_width&#61;"wrap_content"
    android:layout_height&#61;"wrap_content"
    android:orientation&#61;"vertical" >
    
   android:id&#61;"&#64;&#43;id/ivThumb"
   android:layout_width&#61;"80dp"
   android:layout_height&#61;"80dp"
   android:src&#61;"&#64;drawable/ic_launcher"/>
   android:id&#61;"&#64;&#43;id/tvTitle"
   android:layout_width&#61;"80dp"
   android:layout_height&#61;"wrap_content"
   android:text&#61;"安卓"
   android:gravity&#61;"center_horizontal"/>




推荐阅读
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
  • 在Android开发中,当TextView的高度固定且内容超出时,可以通过设置其内置的滚动条属性来实现垂直滚动功能。具体来说,可以通过配置`android:scrollbars="vertical"`来启用垂直滚动,确保用户能够查看完整的内容。此外,为了优化用户体验,建议结合`setMovementMethod(ScrollerMovementMethod.getInstance())`方法,使滚动操作更加流畅和自然。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
author-avatar
Im边夫人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有