- 浏览: 61683 次
- 性别:
- 来自: 湖南
最新评论
-
Neacy_Zz:
有些Android也可以显示的出来。
Android 将一张CMYK模式的图片转换成RGB模式的图片 -
hold_on:
AsyncTask 2.3 和 4.0稍有不同
Android从零开始(十五)
知识点:音乐播放、录音、播放视频、录像、拍照
步骤一、主界面布局(代码如下)
步骤二、按钮选择判断(代码如下)
步骤三、音乐播放(代码如下)
步骤四、录音(代码如下)
步骤五、播放视频(代码如下)
步骤六、拍照(代码如下)
步骤七、Activity的注册+权限添加(代码如下)
源码下载请点击这里(将音乐文件复制到raw文件夹):
步骤一、主界面布局(代码如下)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="播放音乐" android:id="@+id/btn1" android:onClick="myclick" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="录音" android:id="@+id/btn2" android:onClick="myclick" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="播放视频" android:id="@+id/btn3" android:onClick="myclick" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="录像" android:id="@+id/btn4" android:onClick="myclick" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="拍照" android:id="@+id/btn5" android:onClick="myclick" /> </LinearLayout>
步骤二、按钮选择判断(代码如下)
package com.example.mediaplayerdemo; import java.io.File; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.View; public class MainActivity extends Activity { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode==1){ if(resultCode==Activity.RESULT_OK){ //获取视频文件的ContentProvider的URI Uri uri=data.getData(); //查询录制的视频 Cursor cursor=getContentResolver().query(uri,null,null,null,null); if(cursor.moveToNext()){ //获取文件的绝对路径 String path=cursor.getString(cursor.getColumnIndex("_data")); Intent intent=new Intent(this,VideoActivity.class); intent.putExtra("path",path ); startActivity(intent); } } } if(requestCode==2){ if(resultCode==Activity.RESULT_OK){ Intent intent=new Intent(this,CameraImageShowActivity.class); try{ intent.putExtra("imagePath", outFile.getAbsolutePath()); startActivity(intent); }catch(Exception e){ e.printStackTrace(); } } } super.onActivityResult(requestCode, resultCode, data); } private String imageName="camera.jpg"; private File outFile; public void myclick(View view){ Intent intent; switch(view.getId()){ case R.id.btn1: intent=new Intent(this,AudioActivity.class); startActivity(intent); break; case R.id.btn2: intent=new Intent(this,RecorderActivity.class); startActivity(intent); break; case R.id.btn3: intent=new Intent(this,VideoActivity.class); intent.putExtra("path",Environment.getExternalStorageDirectory()+"/饥饿游戏A.mp4" ); startActivity(intent); break; case R.id.btn4: intent=new Intent(MediaStore.ACTION_VIDEO_CAPTURE); startActivityForResult(intent, 1); break; case R.id.btn5: intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); outFile = new File(Environment.getExternalStorageDirectory(),imageName); Uri uri = Uri.fromFile(outFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(intent,2); break; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
步骤三、音乐播放(代码如下)
package com.example.mediaplayerdemo; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewDebug.FlagToString; import android.widget.Button; public class AudioActivity extends Activity { Notification notification; NotificationManager manager; static MediaPlayer mediaPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.audio_layout); try { if(mediaPlayer!=null){ mediaPlayer.stop(); mediaPlayer.release(); } //创建MediaPlayer对象并指定播放的音乐 //这种形式是播放资源中的音乐(必须放在raw下) mediaPlayer = MediaPlayer.create(this, R.raw.power_of_love); //如果播放的是SD卡中的音乐 //mediaPlayer=new MediaPlayer(); //mediaPlayer.setDataSource() //在播放前必须要执行stop和prepare这2个方法 mediaPlayer.stop(); mediaPlayer.prepare(); //start方法表示开始播放 mediaPlayer.start(); notification = new Notification(R.drawable.ic_launcher, "正在播放", System.currentTimeMillis()); PendingIntent contentIntent = PendingIntent.getActivity(this, 1, new Intent(this, AudioActivity.class), 0); notification.setLatestEventInfo(this, "正在播放", "Power Of Love.mp3", contentIntent); manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); manager.notify(1, notification); //OnCompletionListener方法在播放结束后触发 mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { //释放播放的资源,避免其他程序使用不到 mediaPlayer.release(); manager.cancel(1); } }); Button stop_btn = (Button) findViewById(R.id.stop_btn); stop_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //在释放之前先停止播放 mediaPlayer.stop(); mediaPlayer.release(); manager.cancel(1); } }); } catch (Exception e) { e.printStackTrace(); } } }
步骤四、录音(代码如下)
package com.example.mediaplayerdemo; import java.io.File; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaRecorder; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnLongClickListener; import android.view.View.OnTouchListener; import android.widget.Button; public class RecorderActivity extends Activity{ File recordAudioFile; MediaRecorder mediaRecorder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.recorder_layout); final Button recorder_btn=(Button)findViewById(R.id.recorder_btn); recorder_btn.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { try{ recordAudioFile=File.createTempFile("record", ".mp3"); mediaRecorder=new MediaRecorder(); //指定来源 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //输出格式(MPGE4) mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //指定编码 mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); //制定录制的路径 mediaRecorder.setOutputFile(recordAudioFile.getAbsolutePath()); mediaRecorder.prepare(); recorder_btn.setText("请大声说话"); //开始录音 mediaRecorder.start(); }catch(Exception e){ e.printStackTrace(); } return false; } }); recorder_btn.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_UP){ final MediaPlayer mediaPlayer=new MediaPlayer(); try{ mediaRecorder.stop(); mediaRecorder.release(); mediaPlayer.setDataSource(recordAudioFile.getAbsolutePath()); mediaPlayer.prepare(); mediaPlayer.start(); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mediaPlayer.stop(); mediaPlayer.release(); recordAudioFile.delete(); recorder_btn.setText("按下说话"); } }); }catch(Exception e){ e.printStackTrace(); } } return false; } }); } }
步骤五、播放视频(代码如下)
package com.example.mediaplayerdemo; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.KeyEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.ImageButton; public class VideoActivity extends Activity implements SurfaceHolder.Callback{ private SurfaceView surfaceView; private SurfaceHolder surfaceHolder; private MediaPlayer mediaPlayer; private String path; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==event.KEYCODE_BACK){ mediaPlayer.stop(); finish(); return super.onKeyDown(keyCode, event); } return false; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.video_layout); surfaceView=(SurfaceView)findViewById(R.id.surfaceView); surfaceHolder=surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceHolder.setKeepScreenOn(true); path=getIntent().getStringExtra("path"); mediaPlayer=new MediaPlayer(); ImageButton play_btn=(ImageButton)findViewById(R.id.play_btn); ImageButton stop_btn=(ImageButton)findViewById(R.id.stop_btn); ImageButton pause_btn=(ImageButton)findViewById(R.id.pause_btn); ImageButton reset_btn=(ImageButton)findViewById(R.id.reset_btn); } private int position=0; public void onControl(View v) { switch(v.getId()){ case R.id.play_btn: if(mediaPlayer.isPlaying()){ return; } play(); break; case R.id.pause_btn: position=mediaPlayer.getCurrentPosition(); mediaPlayer.pause(); break; case R.id.reset_btn: position=0; play(); break; case R.id.stop_btn: position=0; mediaPlayer.stop(); break; } } @Override protected void onDestroy() { mediaPlayer.release(); super.onDestroy(); } private void play(){ try{ mediaPlayer.reset(); mediaPlayer.setDataSource(path); mediaPlayer.setDisplay(surfaceHolder); mediaPlayer.prepare(); Log.v("s_position", position+""); mediaPlayer.seekTo(position); mediaPlayer.start(); position=0; }catch(Exception e){ Log.e(getClass().getName(), e.toString()); } } @Override protected void onPause() { position=mediaPlayer.getCurrentPosition(); mediaPlayer.stop(); super.onPause(); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { position=savedInstanceState.getInt("position"); super.onRestoreInstanceState(savedInstanceState); } @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt("position", mediaPlayer.getCurrentPosition()); super.onSaveInstanceState(outState); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { play(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { } }
步骤六、拍照(代码如下)
package com.example.mediaplayerdemo; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.Display; import android.widget.ImageView; public class CameraImageShowActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.camera_image_show_layout); Display display = this.getWindowManager().getDefaultDisplay(); int dw = display.getWidth(); int dh = display.getHeight(); BitmapFactory.Options op = new BitmapFactory.Options(); //必须设置为true,才能更改Options的属性 op.inJustDecodeBounds = true; Bitmap cameraBitmap=BitmapFactory.decodeFile(getIntent().getStringExtra("imagePath"),op); int wRatio = (int) Math.ceil(op.outWidth / (float) dw); int hRatio = (int) Math.ceil(op.outHeight / (float) dh); if (wRatio > 1 && hRatio > 1) { if (wRatio > hRatio) { op.inSampleSize = wRatio; } else { op.inSampleSize = hRatio; } } // 修改完毕后再设置为false op.inJustDecodeBounds = false; cameraBitmap=BitmapFactory.decodeFile(getIntent().getStringExtra("imagePath"),op); ImageView show_full=(ImageView)findViewById(R.id.show_full); show_full.setImageBitmap(cameraBitmap); } }
步骤七、Activity的注册+权限添加(代码如下)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mediaplayerdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.mediaplayerdemo.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".AudioActivity"/> <activity android:name=".RecorderActivity"/> <activity android:name=".VideoActivity"/> <activity android:name=".CameraImageShowActivity"/> </application> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> </manifest>
源码下载请点击这里(将音乐文件复制到raw文件夹):
- power_of_love.zip (3.8 MB)
- 下载次数: 1
- MediaPlayerDemo.zip (8.7 MB)
- 下载次数: 1
发表评论
-
Android自定义控件--3(刷新动画)
2014-02-26 11:14 946一个乐动力的刷新动画 package com.example. ... -
Android自定义控件--2(数字签名)
2014-02-26 11:08 919客户信息交互用到的一个数字签名,保存的是bmp图片(我那会在P ... -
Android自定义控件--1(TextView跑马灯效果)
2014-02-26 10:57 1554N久没有跟新了,最近 ... -
Android 将一张CMYK模式的图片转换成RGB模式的图片
2013-06-25 17:32 2213Android系统是不能够显示打印模式(CMYK)的图片的。所 ... -
Android TextToSpeech语音播放文本
2013-06-25 17:17 1850步骤一、初始化 package com.example.spe ... -
Android连接电脑eclipse无法识别=解决办法
2013-05-23 09:25 21401、方法一:“我的电脑”-->“属性”-->“设备 ... -
Android BaseAdapter如何获得每一项并添加按钮事件
2013-05-21 15:11 3734package com.hangcheng; impor ... -
Android的VideoView如何循环播放
2013-05-15 14:01 4832package com.hangcheng; impor ... -
Android如何获取asset目录下所有文件的路径
2013-05-15 09:48 7691package com.hangcheng.util; ... -
Android--WebView+HTML+Javascript
2013-04-09 17:17 1709知识点:android的WebView控件加载HTML并通过j ... -
VideoView重绘
2013-04-01 23:39 1328知识点:Android中的VideoView控件默认情况下是不 ... -
Android从零开始—监听广播BroadcastReceiver(二十一)
2013-03-05 10:17 2081知识点:电话拒接+短息 ... -
Android从零开始—电话+短信(二十)
2013-03-05 10:03 1138知识点:系统电话号码和短信的获取(最好用真机,模拟器上木有电话 ... -
Android从零开始(十九)
2013-02-27 10:35 960知识点:back键的处理(有时候我们可能会不小心按了回退键,但 ... -
Android从零开始(十八)
2013-02-27 10:24 837知识点:菜单(menu) 步骤一、创建菜单项(核心代码如下) ... -
Android从零开始(十七)
2013-02-27 10:09 943知识点:抽屉(SlidingDrawer) 先看一下抽屉打开 ... -
Android从零开始(十六)
2013-02-26 19:43 841知识点:闪屏(通常在 ... -
Android从零开始(十五)
2013-02-26 18:32 1086知识点:异步任务AsyncTa ... -
Android从零开始(十四)
2013-02-26 17:16 833知识点:TabHost选项卡之 ... -
Android从零开始(十三)
2013-02-23 22:57 813知识点:TabHost 效果图: 工程目录结构: ...
相关推荐
《Android开发从零开始视频教程》下载地址,常期可用! 文件大小:2.3GB 文件格式:MP4 视频内容: [Android开发从零开始].1.Android开发环境搭建.mp4 30.6MB [Android开发从零开始].2.模拟器的使用.mp4 20.8MB ...
从零开始android游戏编程 包括源码
NULL 博文链接:https://1136051009.iteye.com/blog/1815762
《从零开始Android游戏编程》(第二版)PDF文档,Android游戏开发入门教程。
从零开始Android游戏编程(第二版),由一位高人所写,本人收集整理成word形式放到一块方便大家学习研究。
从零开始Android游戏编程(第二版).文档资料,学习使用
从零开始学Android编程源代码 02-10章的源代码,欢迎下载
我学Android的时候就是用的这本书籍,感觉对于入门时很有帮助的。
从零开始Android游戏编程(第二版)
二、Android Fragment示例讲解一 2.1 创建Fragment 2.2 Fragment 管理 2.3 Fragment 与Activity 通讯 2.4 Fragment 示例 三、Android Fragment示例讲解二 3.1 项目的效果图 3.2 项目结构图与内容分析 3.4 ...
本书共分为4篇包括17章。主要内容有:初识Android系统、*个Android程序、Android常见界面布局、Android基本界面控件、Android高级控件等。
从零开始Android游戏编程(第二版)
绝对是中文里面对opencore工作原理最详细的分析,涉及codec集成,android多媒体框架,引擎状态切换等
从零开始Android游戏编程(第二版)
android 播放局域网共享多媒体文件