- 浏览: 63803 次
- 性别:
- 来自: 湖南
最新评论
-
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 978一个乐动力的刷新动画 package com.example. ... -
Android自定义控件--2(数字签名)
2014-02-26 11:08 975客户信息交互用到的一个数字签名,保存的是bmp图片(我那会在P ... -
Android自定义控件--1(TextView跑马灯效果)
2014-02-26 10:57 1589N久没有跟新了,最近 ... -
Android 将一张CMYK模式的图片转换成RGB模式的图片
2013-06-25 17:32 2310Android系统是不能够显示打印模式(CMYK)的图片的。所 ... -
Android TextToSpeech语音播放文本
2013-06-25 17:17 1903步骤一、初始化 package com.example.spe ... -
Android连接电脑eclipse无法识别=解决办法
2013-05-23 09:25 22231、方法一:“我的电脑”-->“属性”-->“设备 ... -
Android BaseAdapter如何获得每一项并添加按钮事件
2013-05-21 15:11 3770package com.hangcheng; impor ... -
Android的VideoView如何循环播放
2013-05-15 14:01 4863package com.hangcheng; impor ... -
Android如何获取asset目录下所有文件的路径
2013-05-15 09:48 7790package com.hangcheng.util; ... -
Android--WebView+HTML+Javascript
2013-04-09 17:17 1774知识点:android的WebView控件加载HTML并通过j ... -
VideoView重绘
2013-04-01 23:39 1384知识点:Android中的VideoView控件默认情况下是不 ... -
Android从零开始—监听广播BroadcastReceiver(二十一)
2013-03-05 10:17 2126知识点:电话拒接+短息 ... -
Android从零开始—电话+短信(二十)
2013-03-05 10:03 1162知识点:系统电话号码和短信的获取(最好用真机,模拟器上木有电话 ... -
Android从零开始(十九)
2013-02-27 10:35 1010知识点:back键的处理(有时候我们可能会不小心按了回退键,但 ... -
Android从零开始(十八)
2013-02-27 10:24 895知识点:菜单(menu) 步骤一、创建菜单项(核心代码如下) ... -
Android从零开始(十七)
2013-02-27 10:09 1020知识点:抽屉(SlidingDrawer) 先看一下抽屉打开 ... -
Android从零开始(十六)
2013-02-26 19:43 904知识点:闪屏(通常在 ... -
Android从零开始(十五)
2013-02-26 18:32 1150知识点:异步任务AsyncTa ... -
Android从零开始(十四)
2013-02-26 17:16 882知识点:TabHost选项卡之 ... -
Android从零开始(十三)
2013-02-23 22:57 868知识点:TabHost 效果图: 工程目录结构: ...
相关推荐
本书《从零开始Android游戏编程(第二版)》是为那些想要踏入这个领域的初学者精心编写的。它将引导你逐步了解并掌握Android游戏开发的基本技术和流程,助你实现自己的游戏梦想。 首先,Android游戏编程的基础是...
《Android从零开始》这份文档全面且深入地介绍了Android开发的基础知识,对于初学者来说,是一份极佳的学习资源。Android作为全球最流行的移动操作系统,它的应用开发领域广阔,涉及了从用户界面设计到系统级别的...
《从零开始学Android编程》这本书是一本针对初学者精心编写的指南,旨在帮助读者从基础开始逐步掌握Android应用开发的全过程。通过17个章节的深入讲解,它覆盖了Android系统的基本概念、编程环境搭建、应用程序设计...
在《从零开始Android游戏编程》(第二版)这一资源中,作者为我们提供了一条系统学习Android游戏开发的道路。本书涵盖了从基础知识到高级技术的全方位教程,旨在帮助初学者逐步建立起扎实的游戏编程技能。以下是对十二...
这个"android《从零开始PPT》"是为初学者设计的学习资源,旨在帮助他们从基础开始掌握Android开发的知识。 PPT通常包含了丰富的图文信息,能够系统地介绍Android开发的各个方面。首先,这份PPT可能会涵盖Android的...
《从零开始Android游戏编程(第二版)》是一本针对初学者的专业教程,旨在帮助读者逐步掌握Android平台上的游戏开发技术。这本书详细介绍了如何利用Java语言和Android Studio开发出具有吸引力的游戏应用。以下是对该...
《黑马程序员_从零开始征服Android之旅(第二季)源码和笔记(上)》是一部针对初学者的全面Android开发教程,旨在帮助学员系统地掌握Android应用开发的基础知识和实战技巧。通过本教程的学习,你可以从理论出发,...
这个压缩包"《Android游戏编程之从零开始》-Himi-李华明-书籍源码"提供了从基础到进阶的游戏开发源码,适合初学者和有一定经验的开发者进行学习和实践。以下将详细阐述这个资源中涉及的主要知识点。 1. **Android...
"从零开始学Android编程源代码-2" 提供了11至17章的学习资源,旨在帮助初学者逐步掌握Android应用开发的核心技术。以下是这些章节中涵盖的关键知识点: 1. **第11章:用户界面设计** - 这一章主要讲解如何使用...
【从零开始Android游戏编程】是一本面向初学者的教程,旨在帮助读者全面理解如何在Android平台上进行游戏开发。本书不仅涵盖了基础的Android应用开发知识,还深入探讨了游戏编程的核心概念和技术。通过学习,读者将...
在Android开发中,多媒体选择器是一个非常重要的组件,它允许用户在应用中方便地选取图片和视频。...通过PrimFilePicker,开发者可以避免从零开始编写选择器代码,从而将更多精力放在应用的核心功能上。
1. **环境搭建**:开始Android开发前,需要安装Android Studio,它包含了Android SDK、模拟器以及各种工具,能提供代码编辑、调试和构建等功能。同时,设置Android SDK的各个版本,以便支持不同API级别的设备。 2. ...
Android-boxing库通过封装这些复杂操作,让开发者可以快速集成多媒体选择功能,而无需从零开始编写大量重复的代码。这一库尤其适用于需要在应用中实现相册功能的开发者,比如社交应用、图片编辑应用等。 【Android ...
从标题和描述中我们可以看出,这个压缩包包含了一些基础的游戏开发源码,比如"Mine"和"Tank",以及可能的相关文档"android doc",这些都是学习OPhone游戏开发的重要资源。 首先,我们要理解OPhone是什么。OPhone是...
"零基础学Android"意味着从最基础的概念开始,逐步深入到高级技术,全面掌握Android应用开发。 1. **Java核心**: Java是Android应用开发的基础语言,因此首先需要了解Java语法、面向对象编程、异常处理、集合框架、...
《Android从入门到精通...通过这份详尽的PPT教程,读者可以从零开始,逐步掌握Android开发的各个方面,直至达到精通的程度。无论你是刚接触Android的新手,还是希望提升技能的开发者,这套资料都将为你提供宝贵的参考。
【从零开始OPhone游戏编程】是一本针对初学者的指南,主要讲解如何在Android平台上进行游戏开发。这本书特别关注OPhone,一个基于Android系统的中国移动定制版操作系统,尽管OPhone在国内市场的份额已不如从前,但其...
" Android Studio开发实战:从零基础到App上线读书笔记模板 " 本书是一部Android开发的实战教程,由浅入深、由基础到高级,带领读者一步一步走进App开发的神奇世界。全书共分为16章,前8章是基础部分,主要讲解...