SoundPool类

SoundPool类适合用来播放一些短暂的反应速度要求高的声音。SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的操作。SoundPool类支持同时播放多个音效。 应用实例如下:

public class MainActivity extends Activity {private SoundPool sp;private int soundID;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/*** maxStreams : 音源的个数 streamType : 音源的类型 srcQuality : 音源的质量*/sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);// 实例化AudioManager对象,控制声音AudioManager am = (AudioManager) this.getSystemService(MainActivity.AUDIO_SERVICE);// 最大音量float audioMaxVolumn = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);// 当前音量float audioCurrentVolumn = am.getStreamVolume(AudioManager.STREAM_MUSIC);float volumnRatio = audioCurrentVolumn / audioMaxVolumn;// 装载音源,返回相应的idsoundID = sp.load(this, R.raw.song, 1);// 播放声音,priority:优先级,0最低,loop:循环次数,0是不循环,-1是永远循环,rate:回放速度,0.5-2.0之间,1为正常速度// sp.play(soundID, leftVolume, rightVolume, priority,loop, rate);sp.play(soundID, volumnRatio, volumnRatio, 1, 0, 1);}
}

MediaPlayer类

使用MediaPlayer类来播放音频文件

public class Main extends Activity  implements OnClickListener,OnCompletionListener
{private MediaPlayer mediaPlayer;private Button btnPause;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button btnStart1 = (Button)findViewById(R.id.btnStart1);Button btnStart2 = (Button)findViewById(R.id.btnStart2);Button btnStop = (Button)findViewById(R.id.btnStop);btnPause = (Button)findViewById(R.id.btnPause);btnStart1.setOnClickListener(this);btnStart2.setOnClickListener(this);btnStop.setOnClickListener(this);btnPause.setOnClickListener(this);}// 回掉方法,监听音频文件播放完毕public void onCompletion(MediaPlayer mp){mp.release();setTitle("释放资源");}public void onClick(View view){try{switch (view.getId()) {case R.id.btnStart1:  // 播放工程目录下的文件mediaPlayer = MediaPlayer.create(this, R.raw.music);mediaPlayer.setOnCompletionListener(this);// 不需要调用prepare()方法,因为在create()中已经调用过了mediaPlayer.start();  break;case R.id.btnStart2://  播放SD卡上的音频文件(/sdcard/music.mp3)mediaPlayer = new MediaPlayer();mediaPlayer.setDataSource("/sdcard/music.mp3");mediaPlayer.prepare();mediaPlayer.start();break;case R.id.btnStop:if(mediaPlayer != null){if(mediaPlayer.isPlaying())mediaPlayer.stop();}break;   case R.id.btnPause:if(mediaPlayer != null){if("播放".equals(btnPause.getText().toString())){mediaPlayer.start();btnPause.setText("暂停");}else if("暂停".equals(btnPause.getText().toString())){mediaPlayer.pause();btnPause.setText("播放");}}break;default:break;}}catch (Exception e) {// TODO: handle exception}}
}

使用MediaPlayer类来播放视频文件

public class MainActivity extends Activity {private SurfaceView sv;private SurfaceHolder sh;private Callback callback = new Callback() {MediaPlayer mp = null;@Overridepublic void surfaceDestroyed(SurfaceHolder arg0) {if (mp != null) {mp.stop();// 停止播放mp.release();// 释放资源mp = null;}}@Overridepublic void surfaceCreated(SurfaceHolder arg0) {mp = MediaPlayer.create(this, R.raw.move);try {mp.prepare();// 准备播放} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}mp.setDisplay(sh);mp.start();// 播放视频}@Overridepublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,int arg3) {}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);sv = new SurfaceView(this);sh = sv.getHolder();sh.addCallback(callback);setContentView(sv);}
}


使用VideoView类来播放视频文件

<span style="font-size:14px;">public class MainActivity extends Activity {private VideoView vv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);vv = new VideoView(this);setContentView(vv);vv.setVideoPath("/mnt/sdcard/movie.mp4");vv.setMediaController(new MediaController(this));}
}</span>

更详细MediaPlayer类介绍:http://www.eoeandroid.com/thread-176453-1-1.html(引用)

MediaRecorder录音

需要获取的权限:<uses-permission android:name="android.permission.RECORD_AUDIO" />

<span style="font-size:14px;">public class MainActivity extends Activity {private MediaRecorder mr;private Button btnStart;// 开始录音按钮private Button btnStop;// 停止录音按钮@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnStart = (Button) findViewById(R.id.btnStart);btnStop = (Button) findViewById(R.id.btnStop);btnStart.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {startRecord();// 开始录音}});btnStop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {stopRecord();// 停止录音}});}// 停止录音方法protected void stopRecord() {if (mr != null) {mr.stop();mr.release();mr = null;}}// 开始录音方法protected void startRecord() {if (mr == null) {// 在sdcard卡下创建相应的文件目录File dir = new File(Environment.getExternalStorageDirectory(),"sounds");if (!dir.exists()) {dir.mkdir();}// 创建录音文件File file = new File(dir, System.currentTimeMillis() + "amr");if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}mr = new MediaRecorder();// 创建对象// 设置录音源mr.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置输出格式mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);// 设置音源编码mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);// 设置输出路径mr.setOutputFile(file.getAbsolutePath());try {mr.prepare();// 准备录音mr.start();// 开始录音} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
}</span>

通过调用系统的摄像头来进行拍照

public class Main extends Activity implements OnClickListener
{private ImageView imageView;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button btnTakePicture = (Button)findViewById(R.id.btnTakePicture);btnTakePicture.setOnClickListener(this);imageView = (ImageView)findViewById(R.id.imageview);}protected void onActivityResult(int requestCode, int resultCode, Intent data){if(requestCode == 1){if(resultCode == Activity.RESULT_OK){Bitmap cameraBitmap = (Bitmap)data.getExtras().get("data");imageView.setImageBitmap(cameraBitmap);  }}}public void onClick(View view){Intent intent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, 1);}
}

通过调用系统的摄像头来进行录像

public class Main extends Activity implements OnClickListener {public VideoView videoView;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Button btnTakePicture = (Button) findViewById(R.id.btnTakePicture);btnTakePicture.setOnClickListener(this);videoView = (VideoView) findViewById(R.id.videoview);}protected void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode == 1){if(resultCode == Activity.RESULT_OK){Uri uri = data.getData();Cursor cursor = this.getContentResolver().query(uri,null,null,null,null);if(cursor.moveToFirst()){String videoPath =  cursor.getString(cursor.getColumnIndex("_data"));videoView.setVideoURI(Uri.parse(videoPath));videoView.setMediaController(new MediaController(this));videoView.start();}}}}public void onClick(View view) {Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);startActivityForResult(intent, 1);}
}

Android开发_多媒体的简单应用相关推荐

  1. android动画背景,Android开发之背景动画简单实现方法

    在Android开发中,我们都会接到项目的业务需求,实现应用程序背景动画的效果,接下来,爱站技术频道小编带给大家的Android开发之背景动画简单实现方法. 1.先创建动画层,有三张图片 androi ...

  2. android中checkbox使用方法,Android开发中CheckBox的简单用法示例

    本文实例讲述了Android开发中CheckBox的简单用法.分享给大家供大家参考,具体如下: CheckBox是一种在界面开发中比较常见的控件,Android中UI开发也有CheckBox,简单的说 ...

  3. 实战tkinter图形界面开发_如何进行简单的图形开发?

    经过前两篇文章的讲解,我们已经了解了关于图形用户界面,即GUI的知识. 作为初学者,用开发组件tkinter在Python中进行图形开发,是有它的一套规则的. 一般的开发步骤分为五步, 导入tkint ...

  4. Android开发_简单的网络编程

    URLConnection和HttpURLConnection使用的都是java.net中的类,属于标准的java接口. HttpURLConnection继承自URLConnection,差别在与H ...

  5. Android开发:Handler的简单使用(一)

    1.Handler是什么? 原文: A Handler allows you to send and process Message and Runnable objects associated w ...

  6. android开发中Settings结构简单分析

    Settings界面结构简单分析 Setting是android系统很重要的模块,这个模块并不是很复杂,这部分也一直在看,很多时候都是在看某个具体的选项,比如WLAN,蓝牙这样具体的源码,但是对于主界 ...

  7. Android开发_蓝牙基础

    蓝牙开发需要的权限 <uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" /> <u ...

  8. Android开发_布局(Layout)

    Android布局介绍 Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面. Android的五大布 ...

  9. Android开发_如何调用系统默认浏览器访问

    为什么80%的码农都做不了架构师?>>>    http://www.189works.com/article-36661-1.html http://www.cnblogs.com ...

最新文章

  1. 如何验证c++代码线程安全性_Python3基础:如何验证你的代码
  2. sourcetree 卡顿_Android卡顿性能监测方案对比
  3. 创建磁盘陈列(RAID5)使用经验与原则
  4. 闲谈StringBuilder
  5. 【ubuntu-qt-dlib】 配置问题 (一) undefined reference to `XPending'
  6. React开发(152):注意替换路径
  7. 需求分析中对系统的要求
  8. AcWing 1776. 牛的基因组学(STL+枚举)
  9. linux 内核usb,Linux 内核示例程序 usb_skeleton.c 详解
  10. Python 流程控制
  11. 关于app的几个核心功能的设计想法
  12. 解决爱思维尔期刊提供的Latex模板摘要部分改变字体颜色问题File ended while scanning use of \verbatim@start.
  13. 将手机、平板变成电脑第二屏
  14. 《崩坏:星穹铁道》游戏遇到打不开/闪退/黑屏怎么办?
  15. 和风天气ouc——about页面
  16. 如何利用python计算即期利率_PYTHON计算任务收益率
  17. 0.1.3-01 合宙CORE-ESP32-C3制作1.3寸ST7789驱动的简单相册
  18. 笔记本性能参数有哪些
  19. input text 限制文本内容
  20. 微信小程序影视评论交流平台系统毕业设计毕设(2)小程序功能

热门文章

  1. dx12 龙书第七章学习笔记 -- 利用Direct3D绘制几何体(续)
  2. 【光波电子学】MATLAB绘制光纤中线性偏振模式LP之多模光纤的电场分布(光斑)
  3. 南邮计算机组成原理题库答案,南邮考研_微机原理真题.doc
  4. Linux系统屏幕出现错位重影,写真机打印重影与错位问题的解决方法
  5. 分享一套开源免费充电桩云平台(含硬件充电桩)(v2.3.2)
  6. el-upload 批量上传报错 Uncaught TypeError: Cannot set properties of null (setting ‘status‘)
  7. php -m 无显示,phpinfo()有显示解决方案
  8. 什么是域名批量查询?有什么用?
  9. 在html里面处理菱形元素的各种情况
  10. 开发基础 - 总结 - 数据类型(特性 方法) 字符编码