Android开发 ---Media
1、ctivity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <Button
android:text="播放音乐"
android:onClick="playMusic"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="播放视频_1"
android:onClick="playVedio_1"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <Button
android:text="播放视频_2"
android:onClick="playVedio_2"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <Button
android:text="播放视频_3"
android:onClick="playVedio_3"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <Button
android:text="录音"
android:onClick="recorder_test"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <Button
android:text="录像"
android:onClick="recorder_video_test"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> </LinearLayout>
2、MainActivity.java
package com.example.android_media; import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//播放音乐
public void playMusic(View view){
Intent intent=new Intent(this,PlayMusicActivity.class);
startActivity(intent);
} //播放视频一
public void playVedio_1(View view){
Intent intent=new Intent(Intent.ACTION_VIEW);
//定义视频路径
Uri uri= Uri.parse("file:///sdcard/goodmm.mp4");
//根据uri查找指定类型的文件
intent.setDataAndType(uri,"video/mp4");
startActivity(intent);
} //播放视频二
public void playVedio_2(View view){
Intent intent=new Intent(this,PlayVideoActivity.class);
startActivity(intent);
} //播放视频三
public void playVedio_3(View view){
Intent intent=new Intent(this,PlayVideo_2Activity.class);
startActivity(intent);
}
//录音
public void recorder_test(View view){
Intent intent=new Intent(this,RecorderActivity.class);
startActivity(intent);
}
//录像
public void recorder_video_test(View view){
Intent intent=new Intent(this,Recorder_VideoActivity.class);
startActivity(intent);
}
}
3、activity_play_music.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_play_music"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <SeekBar
android:id="@+id/sb"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="播放"
android:onClick="doPlay"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
<Button
android:text="暂停"
android:onClick="doPause"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
<Button
android:text="停止"
android:onClick="doStop"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
4、PlayMusicActivity.java
package com.example.android_media; import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.os.SystemClock;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar; import java.io.IOException; public class PlayMusicActivity extends Activity {
//拖动条
private SeekBar sb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_music);
sb=(SeekBar)findViewById(R.id.sb);
//设置进度条改变监听事件
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) { }
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if(mp!=null)
//改变音频播放进度,通过拖动条的位置实现快进和后退
mp.seekTo(seekBar.getProgress());
}
});
} //播放音乐
//播放器
MediaPlayer mp;
boolean isRun=true;
public void doPlay(View view){
if(mp!=null)
return;
isRun=true;
//实例化播放器
mp=new MediaPlayer();//构建一个播放器对象
//使用reset()方法来恢复一些意外错误
mp.reset();
//获取音频路径
String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/nobody.mp3";
try {
//给播放器加载资源
mp.setDataSource(path);//设置要播放的文件路径
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置多媒体类型
mp.prepare();//准备就绪
//getDuration() 获取音频文件的总长度,将其设置为进度条的长度
sb.setMax(mp.getDuration());//设置进度条最大值
mp.start();//开始播放 //更新进度
new Thread(new Runnable() {
@Override
public void run() {
//mp.getCurrentPosition()获取音频当前播放点
//如果正在播放并且当前播放点小于音频的最大长度
while(isRun&&mp.getCurrentPosition()<=sb.getMax()){
//设置拖动条当前的位置和音频播放的当前播放点的位置保持一致
sb.setProgress(mp.getCurrentPosition());
SystemClock.sleep(200);
}
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
} public void doPause(View view){
if(mp==null)
return;
if(mp.isPlaying()){
mp.pause();
((Button)view).setText("继续播放");
}else{
mp.start();
((Button)view).setText("暂停");
}
} public void doStop(View view){
if(mp!=null&&mp.isPlaying()){
isRun=false;
mp.stop();
mp.release();
mp=null;
}
} @Override
protected void onDestroy() {
super.onDestroy();
doStop(null);
}
}
5、activity_play_video.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_play_video"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <VideoView
android:id="@+id/videoView"
android:background="@drawable/bg"
android:layout_width="match_parent"
android:layout_height="300dp" />
</LinearLayout>
6、PlayVideoActivity.java
package com.example.android_media; import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
import android.widget.MediaController;
import android.widget.VideoView; public class PlayVideoActivity extends Activity { private VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_video);
videoView=(VideoView)findViewById(R.id.videoView);
videoView.setMediaController(new MediaController(this));
Uri uri= Uri.parse("file:///sdcard/goodmm.mp4");
videoView.setVideoURI(uri);
new Thread(new Runnable() {
@Override
public void run() {
SystemClock.sleep(5000);
runOnUiThread(new Runnable() {
@Override
public void run() {
videoView.setBackground(null);
videoView.start();
}
});
}
}).start();
}
}
7、activity_play_video_2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_play_music"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <SurfaceView
android:id="@+id/sfView"
android:background="@drawable/bg"
android:layout_width="match_parent"
android:layout_height="260dp" />
<SeekBar
android:id="@+id/sb"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="播放"
android:onClick="doPlay"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
<Button
android:text="暂停"
android:onClick="doPause"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
<Button
android:text="停止"
android:onClick="doStop"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
8、PlayVideo_2Activity.java
package com.example.android_media; import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.os.SystemClock;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar; import java.io.IOException; public class PlayVideo_2Activity extends Activity { private MediaPlayer mp;
private SurfaceView sfView;
private SurfaceHolder holder;
private SeekBar sb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_video_2); sb=(SeekBar)findViewById(R.id.sb);
sfView=(SurfaceView)findViewById(R.id.sfView);
holder=sfView.getHolder(); sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if(mp!=null)
mp.seekTo(seekBar.getProgress());
}
});
} boolean isRun=true;
public void doPlay(View view){
if(mp!=null)
return;
isRun=true;
mp=new MediaPlayer();
mp.reset();
String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/goodmm.mp4";
try {
mp.setDataSource(path);//设置数据源
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDisplay(holder);//设置显示位置
mp.prepare();
sb.setMax(mp.getDuration());
sfView.setBackground(null);
mp.start(); new Thread(new Runnable() {
@Override
public void run() {
while (isRun&&mp.getCurrentPosition()<=sb.getMax()){
sb.setProgress(mp.getCurrentPosition());
SystemClock.sleep(200);
}
}
}).start(); } catch (IOException e) {
e.printStackTrace();
}
} public void doPause(View view){
if(mp==null)
return;
if(mp.isPlaying()){
mp.pause();
((Button)view).setText("继续播放");
}else{
mp.start();
((Button)view).setText("暂停");
}
} public void doStop(View view){
if(mp!=null&&mp.isPlaying()){
isRun=false;
mp.stop();
mp.release();
mp=null;
}
} @Override
protected void onDestroy() {
super.onDestroy();
doStop(null);
}
}
9、activity_recorder_video.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_recorder__video"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <SurfaceView
android:id="@+id/sfView"
android:layout_width="match_parent"
android:layout_height="300dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="开始录像"
android:onClick="doStart"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
<Button
android:text="停止录像"
android:onClick="doStop"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
<Button
android:text="播放录像"
android:onClick="doPlay"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
</LinearLayout> </LinearLayout>
10、Recorder_VideoActivity.java
package com.example.android_media; import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View; import java.io.IOException; public class Recorder_VideoActivity extends Activity { private MediaPlayer mp;
private SurfaceView sfView;
private SurfaceHolder holder;
private MediaRecorder recorder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recorder__video);
sfView=(SurfaceView)findViewById(R.id.sfView);
holder=sfView.getHolder();
} //开始录像
public void doStart(View view){
recorder=new MediaRecorder();
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/luxiang.mp4";
recorder.setOutputFile(path);
recorder.setPreviewDisplay(holder.getSurface());
try {
recorder.prepare();
recorder.start();
} catch (IOException e) {
e.printStackTrace();
}
} public void doStop(View view){
if(recorder!=null){
try{
recorder.stop();
}catch (Exception ex){
ex.printStackTrace();
}
} } public void doPlay(View view){
if(mp!=null)
return;
mp=new MediaPlayer();
mp.reset();
String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/luxiang.mp4";
try {
mp.setDataSource(path);//设置数据源
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDisplay(holder);//设置显示位置
mp.prepare();
sfView.setBackground(null);
mp.start();
}catch (Exception ex){
ex.printStackTrace();
} }
}
11、activity_recorder.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_recorder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <Button
android:text="开始录音"
android:onClick="doStart"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="结束录音"
android:onClick="doStart"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="播放录音"
android:onClick="doPlay"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
12、RecorderActivity.java
package com.example.android_media; import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.View; import java.io.IOException; public class RecorderActivity extends Activity { private MediaRecorder recorder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recorder);
} //开始录音
public void doStart(View view){
if(recorder!=null)
return;
recorder=new MediaRecorder();//构建了一个录音设备
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置声音来源
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置录音文件格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);//设置声音编码类型
String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/luyin.3gp";
recorder.setOutputFile(path);//设置输出文件位置
try {
recorder.prepare();//录音设备就绪
recorder.start();//开始录音
} catch (IOException e) {
e.printStackTrace();
}
} //录音结束
public void doStop(View view){
if(recorder!=null){
recorder.stop();
recorder.release();
recorder=null;
}
} //播放录音
MediaPlayer mp;
public void doPlay(View view){
if(mp!=null)
return;
mp=new MediaPlayer();
mp.reset();
String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/luyin.3gp";
try {
mp.setDataSource(path);
mp.prepare();
mp.start();
} catch (IOException e) {
e.printStackTrace();
}
} @Override
protected void onDestroy() {
super.onDestroy();
doStop(null);
}
}
13、AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android_media"> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" /> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".PlayMusicActivity" />
<activity android:name=".PlayVideoActivity" />
<activity android:name=".PlayVideo_2Activity" />
<activity android:name=".RecorderActivity" />
<activity android:name=".Recorder_VideoActivity"></activity>
</application> </manifest>
14、bg.png
Android开发 ---Media的更多相关文章
- Android 开发环境搭建以及工具(不断更新)
学习android需要学习的编程知识 https://wiki.cyanogenmod.org/w/Doc:_Development_Resources 从http://source.android. ...
- Android开发涉及有点概念&相关知识点(待写)
前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...
- android开发之——获取相册图片和路径
Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题. 比如:managed ...
- Android开发中,那些让您觉得相见恨晚的方法、类或接口
Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...
- Mac android 开发 sdk配置和手机连接
本文适合已经很熟悉android开发的人员: 首先安装Mac版的eclipse 其次是android sdk的准备: 由于android sdk在线更新很不方便,所以可以选择复制:准备好Mac下的an ...
- Android开发系列之学习路线图
通过前面的3篇博客已经简单的介绍了Android开发的过程并写了一个简单的demo,了解了Android开发的环境以及一些背景知识. 接下来这篇博客不打算继续学习Android开发的细节,先停一下,明 ...
- Android群英传》读书笔记 (1) 第一章 Android体系与系统架构 + 第二章 Android开发工具新接触
第一章 Android体系与系统架构 1.Dalvik 和 ARTDalvik好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.ART好比是一辆组装好了的自行车,装好就可以骑了. ...
- android开发中的5种存储数据方式
数据存储在开发中是使用最频繁的,根据不同的情况选择不同的存储数据方式对于提高开发效率很有帮助.下面笔者在主要介绍Android平台中实现数据存储的5种方式. 1.使用SharedPreferences ...
- Android开发最佳学习路线图
为了帮助大家更好的学习Android开发的相关知识,尚观4G智能操作系统研究室(www.up4g.com)为大家制作下面学习路线图:希望能帮助到广大的android爱好者. 在開始之前我们 ...
随机推荐
- 裸奔的bootloader单步调试
2011-03-01 23:25:22 目地:更清晰的了解bootloader的结构及功能.为移植U-boot打基础. 以前只知道大概,今天利用IAR调试工具,看着汇编代码,看着寄存器,看着内存.来单 ...
- 通过gmapping和伪造的odom,完成Kinect建图
传感器信息: 环境深度信息:sensor_msgs/laserScan -----> RGBD三维点云数据:通过ros功能包depthimage to laserscan完成深度相机数据转换成激 ...
- vue-i18n使用ES6语法以及空格换行问题
1.运行报错 报错使用了不恰当的exports Uncaught TypeError : Cannot assign to read only property 'exports ' of objec ...
- JavaScript 示例
JavaScript 示例 <html lang="en"> <head> <meta charset="UTF-8"> & ...
- 关于oracle result_cache
结果集缓存 和聚合物化视图类似,报表系统和数据仓库系统是最适合结果集缓存的,这些系统通常具有大量复杂的SQL,其中不少子查询包含聚合函数,如果能够尽可能重用这些已经计算过的聚合结果集,将极大的提升系统 ...
- PHP遍历目录和文件及子目录和文件
正常直接使用opendir方法,就可以读到所有的目录和文件 文件可以直接记录下来,目录则需要再进一步获取里边的文件信息 也就是,如果当前读出来是目录,则需要再次调用函数本身(递归),直到没有目录 循环 ...
- UI自动化(十二)appium
windows不可以测试iosmac 是可以测试Android ios appium cmd 下装的是appium的服务端appium-desktop 是定位元素的工具,同时自带一个appium服务端 ...
- 第二次作业-git的基本操作
作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 一.修改用户名和邮箱地址: (1)配置用户名命令:$git ...
- CF932E Team Work
思路 第二类斯特林数和组合数推式子的题目 题目要求\(\sum_{i=1}^n \left(\begin{matrix}n \\ i \end{matrix} \right) i^k\) 一个性质 第 ...
- [转载]C++之路起航——标准模板库(deque)
转自:https://www.cnblogs.com/grhyxzc/p/5074061.html deque(双端队列):http://baike.baidu.com/link?url=JTvA2c ...