Android 流媒体系列(二)

简介: import java.io.IOException;import android.app.Activity;import android.content.ContentResolver;import android.
 
import java.io.IOException;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.media.ExifInterface;
import android.os.Bundle;
import android.provider.MediaStore;
public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //测试1
        //getVideosInfo();
        //测试2
        //getPhotosInfo();
        //测试3
        getAudiosInfo();
    }
    
    //获取设备上所有的视频信息
	private void getVideosInfo() {
		ContentResolver contentResolver=getContentResolver();
		String [] videoColumns=new String[]{
				MediaStore.Video.Media._ID,
				MediaStore.Video.Media.DATA,
				MediaStore.Video.Media.TITLE,
				MediaStore.Video.Media.MIME_TYPE
		};
//      两种方法均可		
//		Cursor cursor=
//	    this.managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, mediaColumns, null, null, null);
		Cursor cursor=contentResolver.query
		(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, videoColumns, null, null, null);
		while (cursor.moveToNext()) {
			String _id=
			cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
			String filePath=
			cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
			String title=
			cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
			String mime_type=
			cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.MIME_TYPE));
		    System.out.println("_id="+_id);
		    System.out.println("title="+title);
		    System.out.println("filePath="+filePath);
		    System.out.println("mime_type="+mime_type);
		}
	}
	
	 //获取设备上所有的照片信息
	 private void getPhotosInfo() {
			ContentResolver contentResolver=getContentResolver();
			String [] photoColumns=new String[]{
					MediaStore.Images.Media._ID,
					MediaStore.Images.Media.DATA,
					MediaStore.Images.Media.TITLE,
					MediaStore.Images.Media.MIME_TYPE,
					MediaStore.Images.Media.SIZE,
					MediaStore.Images.Media.ORIENTATION
			};
//	      两种方法均可		
//			Cursor cursor=
//		    this.managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, mediaColumns, null, null, null);
			Cursor cursor=contentResolver.query
			(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, photoColumns, null, null, null);
			while (cursor.moveToNext()) {
				String _id=
				cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
				String filePath=
				cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
				String title=
				cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.TITLE));
				String mime_type=
				cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.MIME_TYPE));
				String size=
				cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.SIZE));
				//得到照片旋转角度方法一
				String orientation0=cursor.getString
				(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.ORIENTATION));
			    System.out.println("_id="+_id);
			    System.out.println("size="+size);
			    System.out.println("title="+title);
			    System.out.println("filePath="+filePath);
			    System.out.println("mime_type="+mime_type);
			    System.out.println("第一处 orientation0="+orientation0);
			    try {
					ExifInterface exifInterface=new ExifInterface(filePath);
					String image_length=
					exifInterface.getAttribute(ExifInterface.TAG_IMAGE_LENGTH);
					String image_width=
					exifInterface.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);
					String orientation1=
					exifInterface.getAttribute(ExifInterface.TAG_ORIENTATION);
					String dateTime=
					exifInterface.getAttribute(ExifInterface.TAG_DATETIME);
					System.out.println("image_length="+image_length);
					System.out.println("image_width="+image_width);
					System.out.println("dateTime="+dateTime);
					//得到照片旋转角度方法二
					//应该结合ExifInterface源码分析.
					//此处有待于进一步分析和验证
					switch (Integer.valueOf(orientation1)) {
					case 1:
						System.out.println("第二处旋转角度="+0);
						break;
					case 2:
						//matrix.invert(matrix);
						break;
					case 3:
						//matrix.setRotate(180);
						System.out.println("第二处旋转角度="+180);
						break;
					case 4:
						//matrix.invert(matrix);
						//matrix.setRotate(180);
						System.out.println("第二处旋转角度="+180);
						break;
					case 5:
						//matrix.setRotate(90);
						//matrix.invert(matrix);
						System.out.println("第二处旋转角度="+90);
						break;
					case 6:
						//matrix.setRotate(90);
						System.out.println("第二处旋转角度="+90);
						break; 
					case 7: 
						//matrix.invert(matrix);
						//matrix.setRotate(90);
						System.out.println("第二处旋转角度="+90);
						break;    
					case 8:
						//matrix.setRotate(270);
						System.out.println("第二处旋转角度="+270);
						break;
					default: 
						break;
					}
					System.out.println("XXXXXXXXXXXXXXXXXXX");
				} catch (IOException e) {
					e.printStackTrace();
				}
				
			}
		 
	 }
	 
	 //获取设备上所有的音频信息
	 private void getAudiosInfo() {
			ContentResolver contentResolver=getContentResolver();
			String [] audioColumns=new String[]{
					MediaStore.Audio.Media._ID,
					MediaStore.Audio.Media.DATA,
					MediaStore.Audio.Media.TITLE,
					MediaStore.Audio.Media.MIME_TYPE
			};
//	      两种方法均可		
//			Cursor cursor=
//		    this.managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mediaColumns, null, null, null);
			Cursor cursor=contentResolver.query
			(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, audioColumns, null, null, null);
			while (cursor.moveToNext()) {
				String _id=
				cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));
				String filePath=
				cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
				String title=
				cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
				String mime_type=
				cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.MIME_TYPE));
			    System.out.println("_id="+_id);
			    System.out.println("title="+title);
			    System.out.println("filePath="+filePath);
			    System.out.println("mime_type="+mime_type);
				
			}
		 
	 }
   
}

移动开发:Android中MediaStore使用示例


相关文章
|
数据采集 编解码 Ubuntu
Android流媒体开发之路二:NDK C++开发Android端RTMP直播推流程序
Android流媒体开发之路二:NDK C++开发Android端RTMP直播推流程序
278 0
|
Web App开发 开发工具 Android开发
Android平台不需要单独部署流媒体服务如何实现内网环境下一对一音视频互动
我们在做内网环境的一对一音视频互动的时候,遇到这样的技术诉求:如智能硬件场景下(比如操控智能硬件),纯内网环境,如何不要单独部署RTMP或类似流媒体服务,实现一对一音视频互动。
|
编解码 Ubuntu Java
Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器
Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器
278 0
|
传感器 前端开发 Java
Android流媒体开发之路一:Camera2采集摄像头原始数据并手动预览
Android流媒体开发之路一:Camera2采集摄像头原始数据并手动预览
669 0
|
编解码 Android开发 iOS开发
android和ios流媒体库推荐
1基本信息编辑 Vitamio是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染。从2011年8月上线到2014年1月,Vitamio 凭借其简洁易用的 API 接口赢得了全球众多开发者的青睐,全球已经有超过3000 种应用在使用Vitamio,覆盖用户超过5亿。
1494 0
|
缓存 安全 API
Android 流媒体系列(一)
Android   设置铃声分析   代码其实没有几行,这里简单记录下学习的过程. Android系统启动时会扫描系统与SD卡中的对媒体文件,分别存入数据库sqlite中,以contentProvider的形式对外提供服务 路径:/data/data/com.
897 0
|
6天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
11天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
13天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
15天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。