`
弄月吟风
  • 浏览: 197146 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android调用系统多媒体库

 
阅读更多

这是我封装的一个多媒体工具类,所有调用都是基于系统多媒体库的!

多媒体工具类:package com.team618.mediatest.cn;

import java.io.ByteArrayOutputStream;
import java.io.File;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.text.format.Time;
public class MediaFactory implements Constant{
	static String nowtime = null;
	public static String mMediaFilePath;
	public static void takePhoto(Context context,String Path)//拍照功能
	{	
		getTime();
		mMediaFilePath=Path+nowtime+".jpg";
		Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
				Path, nowtime+".jpg")));
		((Activity)context).startActivityForResult(intent,PHOTOHRAPH);
	}
	public static void takePViedo(Context context,String Path)//摄像功能
	{	
		Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
		((Activity)context).startActivityForResult(intent, MEDIAHRAPH);
		
	}
	public static void takeAudio(Context context,String Path)//录音功能
	{	
		Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
		intent.setType("audio/*");
		((Activity)context).startActivityForResult(intent, MEDIAHRAPH);	
	}
	/**
	@describe  
	这是一个创建多媒体文件的方法,可以调用系统封装的功能,在进行拍照,录音或者录像
	@param 第一个参数是多媒体的类型,第二个参数是存储路径,第三个是文件的名字,第四个是文件的类型
	例如: 图片类型    Media_Type="MediaStore.ACTION_IMAGE_CAPTURE" ,此时的文件类型一般为:File_Type=".jpg"
	           录音类型    Media_Type="MediaStore.Audio.Media.RECORD_SOUND_ACTION" ,此时的文件类型一般为:File_Type=".3gpp"
	           视频类型    Media_Type="MediaStore.ACTION_VIDEO_CAPTURE" ,此时的文件类型一般为:File_Type=".m4v";
	@return  没有返回值
	@throw  没有异常
	*/
/*	private static void takeMedia(Context context,String Media_Type,String Path,String File_Name,String File_Type)
	{	
		Intent intent = new Intent(Media_Type);
		intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
				Path, File_Name+ File_Type)));
		((Activity)context).startActivityForResult(intent, MEDIAHRAPH);
	}
	*/
	/**
	@describe  
	这是一个图像的裁剪功能,这个方法可以启动系统自带的相册,然后我们选择其中的照片进行裁剪
	当裁剪完毕后,就会关闭系统的Activity,并返回处理后的图片的缓存
	@param 没有参数传入
	@return 返回值是一个处理过以后的位图Bitmap
	@throw  没有异常
	*/
	public static void startPhotoZoom(Context context){   //图像裁剪,带有照片的选择功能,	
		  Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
		  intent.setType(IMAGE_UNSPECIFIED);  //设置类型
		  intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例
		  intent.putExtra("aspectX", 1); 
		  intent.putExtra("aspectY", 1); //
		 // outputX outputY 是裁剪图片宽高 
		  intent.putExtra("outputX", 64);
		  intent.putExtra("outputY", 64); 
		  intent.putExtra("return-data", true);
		  ((Activity)context).startActivityForResult(intent, PHOTORESOULT);  //
	}
	public static Bitmap getZoomphoto(Intent data)  //图片裁剪的辅助方法,用来获得处理以后的结果照片
	{
		 Bundle extras = data.getExtras();  
	        if (extras != null) {  
	            Bitmap photo = extras.getParcelable("data");  
	            ByteArrayOutputStream stream = new ByteArrayOutputStream();  
	            photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0 - 100)压缩文件   
	            return photo;
	            // imageView.setImageBitmap(photo);  
	        } 
	        else {
				return null;
			}
	}
	/**
	 * 多媒体文件的选择方法,参数闯入是需要查找的多媒体文件类型,返回值是该多媒体的Uri
	 * 
	 * 
	 */
    public static void selectMedia(Context context,String MEDIA_UNSPECIFIED)
    {
    	Intent intent = new Intent(Intent.ACTION_PICK, null);
		intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,MEDIA_UNSPECIFIED
				);
		((Activity)context).startActivityForResult(intent, SELECTMEDIA);
    }
    public static void selectAudio(Context context,String MEDIA_UNSPECIFIED)
    {
    	Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 

    	intent.setType("audio/*"); //String AUDIO_AMR = "audio/amr"; 
    	intent.setClassName("com.android.soundrecorder","com.android.soundrecorder.SoundRecorder"); 

    	((Activity) context).startActivityForResult(intent,SELECTADUIO); 

    }
    /*Uri的作用
     * Cursor cursor = getContentResolver().query(uri, null, null, null, null);
		cursor.moveToFirst();
		String imgNo = cursor.getString(0); // 图片编号
		String imgPath = cursor.getString(1); // 图片文件路径
		String imgSize = cursor.getString(2); // 图片大小
		String imgName = cursor.getString(3); // 图片文件名
     */
	private static void getTime(){
		Time t = new Time(); // or Time t=new Time("GMT+8"); 加上Time Zone资料。
		
		t.setToNow(); // 取得系统时间。
		int year = t.year;
		int month = t.month+1;
		int date = t.monthDay;
		int hour = t.hour; // 0-23
		int minute = t.minute;
		int second = t.second;
		nowtime=String.valueOf(year)+String.valueOf(month)
				+String.valueOf(date)+String.valueOf(hour)
				+ String.valueOf(minute)+String.valueOf(second);
	}
}

 主Activity

 

package com.team618.mediatest.cn;
import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MediaTestActivity extends Activity implements Constant {
	/** Called when the activity is first created. */
	public File mMediaFile=null;  //多媒体文件
    public Uri mMediaUri=null; //多媒体文件的uri
    public Bitmap mZoomPhoto=null; //缩放后的图片文件
    public String Path="/sdcard";
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.media_test);
		Button takePhoto = (Button) findViewById(R.id.takePhoto);//拍照按钮
		Button takeViedo = (Button) findViewById(R.id.takeViedo);//摄像按钮
		Button takeAudio = (Button) findViewById(R.id.takeAudio);//录音按钮
		Button selectPhoto = (Button) findViewById(R.id.selectPhoto);//选择多媒体文件按钮
		Button zoomPhoto = (Button) findViewById(R.id.zoomPhoto);//图片裁减按钮
		takePhoto.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				MediaFactory.takePhoto(MediaTestActivity.this,Path);
			}
		});

		takeViedo.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				MediaFactory.takePViedo(MediaTestActivity.this,Path);
			}
		});
		takeAudio.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				MediaFactory.takeAudio(MediaTestActivity.this,Path);
			}
		});
		selectPhoto.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				MediaFactory.selectMedia(MediaTestActivity.this,IMAGE_UNSPECIFIED);
				//MediaFactory.selectAudio(MediaTestActivity.this,IMAGE_UNSPECIFIED);
			}
		});
		zoomPhoto.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				MediaFactory.startPhotoZoom(MediaTestActivity.this);
			}
		});
	}
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (resultCode == NONE)
			return;
		//����
		if (requestCode == PHOTOHRAPH){ 
			mMediaFile=new File(MediaFactory.mMediaFilePath);
		}
		//�����ý���ļ�
		if (requestCode == MEDIAHRAPH){ 
			Cursor cursor = getContentResolver().query(data.getData(), null, null, null, null);
			cursor.moveToFirst();
			String mediaFilePath = cursor.getString(1); // ͼƬ�ļ�·��
			mMediaFile=new File(mediaFilePath);
		}
		// ��ȡ���ͼƬ������Ƭ��Uri����Ƶ��Uri
		if (requestCode == SELECTMEDIA) {
			mMediaUri=data.getData();
			Cursor cursor = getContentResolver().query(mMediaUri, null, null, null, null);
			cursor.moveToFirst();
			String mediaFilePath = cursor.getString(1); // ͼƬ�ļ�·��
			Log.i("path",mediaFilePath);
		}
		if (requestCode == SELECTADUIO) {
			mMediaUri=data.getData();
			Log.i("path",mMediaUri.toString());//����ļ���·��
		}
		// �õ�ͼƬ���Ŵ�����
		if (requestCode == PHOTORESOULT) {
			mZoomPhoto=MediaFactory.getZoomphoto(data);
			
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
}

 常量类

 

package com.team618.mediatest.cn;
public interface Constant {
	public static final int NONE=0;
	public static final int PHOTOHRAPH = 1;// 创建多媒体文件
	public static final int MEDIAHRAPH = 2;// 创建多媒体文件
	public static final int SELECTMEDIA =3; // 选择多媒体文件
	public static final int SELECTADUIO=4;
	public static final int PHOTORESOULT=5;// 图片截图处理结果
	public static final String IMAGE_UNSPECIFIED = "image/*";
	public static final String VIEDO_UNSPECIFIED = "viedo/*";
	public static final String AUDIO_UNSPECIFIED = "audio/*";
}

 xml布局文件

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
    <Button 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="拍照"
    android:id="@+id/takePhoto"/>
     <Button 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="视屏"
    android:id="@+id/takeViedo"/>
     <Button 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="录音"
    android:id="@+id/takeAudio"/>
     <Button 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="找图片"
    android:id="@+id/selectPhoto"/>
     <Button 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="截图"
    android:id="@+id/zoomPhoto"
    />
</LinearLayout>

 注意添加录音权限  <uses-permission      android:name="android.permission.RECORD_AUDIO"> 

    </uses-permission>

分享到:
评论

相关推荐

    Android调用手机多媒体

    Android调用手机多媒体,实现手机播放、拍照和相册等功能

    android系统原理及开发要点详解

     第9章“Android的多媒体系统”,介绍Android的多媒体系统的核心部分,包括Android中多媒体系统的业务、结构、多媒体系统的核心框架、OpenCore系统结构和使用等内容。  第10章“Android的电话部分”,介绍Android...

    Android多媒体框架

    Android 系统架构从下到上依次是 Linux 内 核,本地库,应用框架层和应用层,我们可以看到 MediaFramework 处于本地库 Libraries 这一层,该层不是用 java 实现的,一般是 C/C++,它们通过 java 的 JNI 方 式调用。

    精通ANDROID 5多媒体开发.part2

    精通ANDROID 5多媒体开发.part2 由于上传限制,此书籍采用分卷压缩,需要与 精通ANDROID 5多媒体开发.part1一起才能正常解压使用

    Android多媒体开发高级编程

    《Android多媒体开发高级编程——为智能手机和平板电脑开发图形、音乐、视频和富媒体应用》使用清晰、直观的示例介绍了Android SDK中丰富的多媒体功能,有助于您开发能够创建、播放和共享多媒体的优秀Android应用...

    Android系统架构概述PPT

    Android系统使用的Linux内核包含了一些专用驱动,例如Logger、Binder、Ashmem、Wakelock、Low-Memory Killer和Alarm等,这些Android专用驱动构成了Android运行时的基石。Android运行时从下到上又包括了HAL层、应用...

    android多媒体框架

    Android-MediaPlayer上层应用程序使用JAVA语言编写,实现逻辑处理;JAVA程序通过调用底层媒体库来实现具体的音视频文件和网络视频播放; JAVA程序通过JNI接口实现对底层媒体库libmedia.so的调用; MediaPlayer在运行...

    android多媒体开发

    该文档介绍了android多媒体开发及如何使用多媒体开发

    android多媒体编程实例

    一个android多媒体开发实例包,里面包含了图像、音频处理,特别还包含了快速傅立叶变换的使用。该开发包为本人根据Pro Android Media一书英文版而编写的实例,参考了随书代码,并补充了部分函数说明。该代码对有意...

    调用Android系统自带功能

    调用Android系统自带功能,包括多媒体、短信、通话。

    精通ANDROID 5多媒体开发.part1

    精通ANDROID 5多媒体开发.part1 由于上传限制,此书籍采用分卷压缩,需要与 精通ANDROID 5多媒体开发.part2一起才能正常解压使用

    android系统原理及开发要点详解_韩超_梁泉 4

     第9章“Android的多媒体系统”,介绍Android的多媒体系统的核心部分,包括Android中多媒体系统的业务、结构、多媒体系统的核心框架、OpenCore系统结构和使用等内容。  第10章“Android的电话部分”,介绍Android...

    Android多媒体功能开发-调用系统Activity的例子

    通过Intent调用Android系统自带Activity界面实现多媒体功能的例子,包括录制、选择、播放音视频,以及拍照、选择、查看照片。这种方式代码简单,运行稳定;但界面固定,不够灵活。系统自带Activity也包括从外部存储...

    Android多媒体编程从初学到精通

    本书主要围绕着Android多媒体编程进行,纵向上,从共享内存、IPC通信、HAL、原生服务、JNI调用,以及多媒体的图像、音频、视频框架等多个层次和子系统着手;横向上,贯穿了移动互联网、Android体系应用框架、...

    基于百度Asr SDK开发的Asr引擎,可以直接调用Android系统asr接口来进行语音识别.zip

    Android 项目是使用 Android 操作系统和相关开发工具开发的一款移动应用程序。Android 平台提供了丰富的功能和接口,开发人员可以使用 Java 或 Kotlin 等编程语言编写 Android 应用程序。Android 项目也可以是针对...

    简单的Android多媒体播放器

    这是一个简单的Android系统开发应用,可以播放MP3格式的文件,通过修改代码可以支持更多的音频播放,播放时会显示同名的jpg图片;也可以播放MP4和3gp格式的视频(因为基本Android接口只支持这两种格式)注:程序是一...

    基于android的多媒体播放器(服务端+客户端+数据库).zip

    使用Android技术实现的简单的多媒体播放器(服务端+客户端+数据库),平台为eclipse,可以作为毕业设计,课程设计等的参考模板,希望大家好好学习,争取更上一层楼。

    Android的多媒体框架OpenCore介绍

    Android的多媒体核心OpenCore的介绍,非常适合入门使用

    Android Studio实现多媒体播放器,音乐视频一体化,功能强大,UI美观,满分课设!

    众多的娱乐方式少不了强大的多媒体功能支持,而Android在这方面做得非常出色。 本期带来的多媒体播放器,可以同时享受听音乐和看视频的乐趣,融合了音乐播放器和网络视频播放器,并且进行完善优化。相对上一版本有...

Global site tag (gtag.js) - Google Analytics