下面简单讲几种Android的多媒体技术,音频,视频,摄像头,录音。介绍的内容很简单,因为暂时没有用到,这是简单的学习一下。
首先讲下多媒体资源的位置:
1:源文件(即res/raw下或assets下)
2:文件系统(即sdcard)
3:流媒体(即网络)
声音:声音又游戏声音和歌曲等,游戏声音一般比较小,适合用SoundPool,歌曲比较大,适合用MediaPlayer。
SoundPool:
MediaPlayer:
视频:视频文件如果在raw下面的话,只能用MediaPlayer,如果是SD卡或者网络资源的话,可以用VideoView
MediaPlayer:
VideoView:
摄像头:摄像头的使用分为两种,一种是使用摄像头,另外一种是直接调用系统的摄像头,
使用摄像头:
直接调用系统的摄像头:
录音:一个简单的录音例子,基本不怎么使用的
录音:
首先讲下多媒体资源的位置:
1:源文件(即res/raw下或assets下)
2:文件系统(即sdcard)
3:流媒体(即网络)
声音:声音又游戏声音和歌曲等,游戏声音一般比较小,适合用SoundPool,歌曲比较大,适合用MediaPlayer。
SoundPool:
private SoundPool sp; private int soundId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); soundId = sp.load(this, R.raw.note1, 1); findViewById(R.id.btnPlaySound).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 声音ID,左声道(0-1.0),右声道,优先级,循环(0不循环,-1一直循环,rate声道频率0.5最慢,1正常,2最快) // sp.play(soundID, leftVolume, rightVolume, priority, loop, rate) sp.play(soundId, 1, 1, 0, 0, 2.0f); } }); }
MediaPlayer:
import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { private MediaPlayer mp=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btnPlaySong).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mp!=null) { mp.start(); } } }); } @Override protected void onResume() { mp= MediaPlayer.create(this, R.raw.song); try { mp.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } super.onResume(); } @Override protected void onPause() { if (mp!=null) { mp.release(); } super.onPause(); } }
视频:视频文件如果在raw下面的话,只能用MediaPlayer,如果是SD卡或者网络资源的话,可以用VideoView
MediaPlayer:
import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; public class SurfaceViewPlayerActivity extends Activity { private SurfaceView sv; private SurfaceHolder holder; private Callback surfaceHolderCallback=new Callback() { private MediaPlayer mp; @Override public void surfaceDestroyed(SurfaceHolder holder) { mp.release(); } @Override public void surfaceCreated(SurfaceHolder holder) { mp = MediaPlayer.create(SurfaceViewPlayerActivity.this, R.raw.movie); try { mp.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mp.setDisplay(holder); mp.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sv = new SurfaceView(this); holder = sv.getHolder(); holder.addCallback(surfaceHolderCallback); setContentView(sv); } }
VideoView:
import android.app.Activity; import android.os.Bundle; import android.widget.MediaController; import android.widget.VideoView; public class VideoViewPlayerAvtivity extends Activity { private VideoView vv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); vv =new VideoView(this); setContentView(vv); vv.setVideoPath("/mnt/sdcard/movie.mp4"); vv.setMediaController(new MediaController(this)); } }
摄像头:摄像头的使用分为两种,一种是使用摄像头,另外一种是直接调用系统的摄像头,
使用摄像头:
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.content.Intent; import android.hardware.Camera; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { private SurfaceView cameraPreview; private Camera camera=null; private Callback cameraPreviewHolderCallback=new Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { stopPreview(); } @Override public void surfaceCreated(SurfaceHolder holder) { startPreview(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cameraPreview = (SurfaceView) findViewById(R.id.cameraPreview); cameraPreview.getHolder().addCallback(cameraPreviewHolderCallback); findViewById(R.id.btnTakePic).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { camera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { String path=null; if ((path =saveTempFile(data))!=null) { Intent i = new Intent(MainActivity.this, ImagePreviewAty.class); i.putExtra("path", path); startActivity(i); }else{ Toast.makeText(MainActivity.this, "保存照片失败", Toast.LENGTH_SHORT).show(); } } }); } }); } private String saveTempFile(byte[] bytes){ try { File f = File.createTempFile("img", ""); FileOutputStream fos = new FileOutputStream(f); fos.write(bytes); fos.flush(); fos.close(); return f.getAbsolutePath(); } catch (IOException e) { e.printStackTrace(); } return null; } private void startPreview(){ camera = Camera.open(); try { camera.setPreviewDisplay(cameraPreview.getHolder()); camera.setDisplayOrientation(90); camera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } private void stopPreview(){ camera.stopPreview(); camera.release(); } }
import java.io.File; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.widget.ImageView; public class ImagePreviewAty extends Activity { private ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); iv = new ImageView(this); setContentView(iv); String path = getIntent().getStringExtra("path"); if (path!=null) { iv.setImageURI(Uri.fromFile(new File(path))); } } }
直接调用系统的摄像头:
import java.io.File; import java.io.IOException; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.View; import android.widget.ImageView; public class MainActivity extends Activity { private static final int REQUEST_CODE_TAKE_PICTURE = 1; private ImageView iv; private File currentImageFile = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv); findViewById(R.id.btnStartSystemCamera).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Environment.getExternalStorageDirectory() SD卡的根目录 File dir = new File(Environment.getExternalStorageDirectory(), "pictures"); if (!dir.exists()) { dir.mkdirs(); } currentImageFile = new File(dir, System.currentTimeMillis()+".jpg"); if (!currentImageFile.exists()) { try { currentImageFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(currentImageFile)); startActivityForResult(i, REQUEST_CODE_TAKE_PICTURE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_CODE_TAKE_PICTURE: iv.setImageURI(Uri.fromFile(currentImageFile)); break; default: break; } super.onActivityResult(requestCode, resultCode, data); } }
录音:一个简单的录音例子,基本不怎么使用的
录音:
import java.io.File; import java.io.IOException; import android.app.Activity; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; public class MainActivity extends Activity { private OnClickListener btnClickListener=new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnStartRecord: startRecord(); break; case R.id.btnStopRecord: stopRecord(); break; } } }; private void startRecord(){ if (mp==null) { File dir = new File(Environment.getExternalStorageDirectory(), "sounds"); if (!dir.exists()) { dir.mkdirs(); } File soundFile = new File(dir, System.currentTimeMillis()+".amr"); if (!soundFile.exists()) { try { soundFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } mp = new MediaRecorder(); mp.setAudioSource(MediaRecorder.AudioSource.MIC); mp.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB); mp.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB); mp.setOutputFile(soundFile.getAbsolutePath()); try { mp.prepare(); mp.start(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } private void stopRecord(){ if (mp!=null) { mp.stop(); mp.release(); mp = null; } } private MediaRecorder mp=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btnStartRecord).setOnClickListener(btnClickListener); findViewById(R.id.btnStopRecord).setOnClickListener(btnClickListener); } }
发表评论
-
2048源码(核心算法有,缺少几个anctionbar,以后补上)
2014-09-25 13:22 15202048游戏基本上有四部分组成, 1:主activity,包含 ... -
android动画效果
2014-09-24 18:06 1144前几天弄alertdialog和popupwindow的时候, ... -
AlertDialog和PopupWindow
2014-09-18 15:44 1899区别:AlertDialog是非阻塞式对话框:AlertDia ... -
基础篇--resources资源
2014-09-12 15:18 534最近一直在做java开发,偶尔敲点android代码,突然发现 ... -
多点触摸(图片缩放为例)
2014-09-01 17:22 652多点触摸的事件跟单点是大同小异的,上个图片缩放的代码,供大家参 ... -
Toast的多种样式(附带Notification)
2014-09-01 13:48 938Toast以前用的时候一直以为只有文字提示,偶然得知也有多种样 ... -
Android Adapter详解(2)
2014-08-15 14:05 10以前Adapter一直用的不是太好,经过长时间的浸淫,现在可以 ... -
BroadcastReceiver简介
2014-08-14 16:27 671BroadcastReceiver作为四大 ... -
关于Android的Service
2014-08-14 13:57 460说起来真是羞愧,以前手机经常开机的时候,不会有任何QQ消息通知 ... -
在开发过程中易出的错误
2014-08-13 16:53 4021:如果继承ListActivity,那么layout中必须有 ... -
Sqlite无脑使用
2014-08-11 14:56 887不会sqlite的人再也不用愁了,无脑使用,只要会粘贴复制就O ... -
android弹出框
2014-08-11 11:23 516不得不说,android自带的弹出框真心丑,而且还不好用,接下 ... -
android几种数据存储方式
2014-08-11 10:45 709android数据存储方式 1:SharedPreferen ... -
SQLiteOpenHelper和ContentProvider区别
2014-08-06 15:08 1434Android中操作数据库主要有两种方法:使用SQLiteOp ... -
xml文件解析SAX
2014-08-05 13:45 497xml文件解析:xml文件解析有四种方式, 1.DOM生成和解 ... -
Android不常用代码(1)
2014-07-31 18:07 536目录 1:Webview 2:js交互 1:Web ... -
系统窗口的调用
2014-07-31 15:46 467直接上代码吧,intent进行调用 @Override ... -
fragment简单实用及数据传递(2)
2014-07-31 15:13 2547FragmentTransaction 进行数据传递 imp ... -
ActionBar简介
2014-07-31 10:47 709Action bar是一个标识应用程序和用户位置的窗口功能,并 ... -
fragment简单实用及数据传递(1)
2014-07-30 16:29 732Fragment的使用相关 使用Fragment时,需要继承 ...
相关推荐
如果教师未能有效引导,学生可能只会浅尝辄止,无法深入理解和掌握知识。 3. 缺乏互动与反馈:多媒体课堂往往过于注重视听效果,而忽略了传统的问答、讨论等互动环节,这可能导致学生的学习深度不足,教师也难以...
久而久之,学生可能会失去对历史学科的兴趣,甚至形成浅尝辄止的学习习惯。 ##### 2. 多媒体使用过频导致学生兴趣减退 多媒体教学作为一种现代化的教学工具,为历史教学带来了前所未有的便利性和多样性。然而,如果...
学生可能忙于应对屏幕上快速闪过的信息,没有足够的时间进行笔记或深入思考,导致知识的浅尝辄止。这显然与信息化教学初衷相悖,即提高学生的自主学习能力和创新思维。 最后,制作高质量的多媒体课件确实需要投入...
然而,尽管信息化教学有诸多优势,教师仍需注意以下几点:一是要确保技术的合理运用,避免技术滥用导致教学内容的浅尝辄止;二是要持续更新和优化教学资源,以适应学生的需求和兴趣变化;三是要注重培养学生的自主...
然而,部分教师过于依赖多媒体技术,忽视了教材的实际应用,导致教学内容浅尝辄止,重点不突出。因此,教师应当提升自身的专业素养,合理运用信息化工具,确保教学内容深入且有针对性。 另一方面,传统的评价模式在...
6. 教学反思:课程设计中,应注意时间管理,避免内容过多导致某些环节浅尝辄止;同时,要敢于放手让学生自我探索,通过小组合作,培养他们的创新思维和实践能力。 总结,这篇描述展示了如何在音乐教育中融入情感...
还有,过度依赖网络可能导致学生缺乏深度学习,浅尝辄止,缺乏系统性和连贯性的学习。 因此,在商务英语教学中,计算机网络应作为辅助工具,与传统教学相辅相成。教师需引导学生合理利用网络资源,同时注重培养学生...
7. **工作原则**:列出了一些应避免的行为,如满足于浅尝辄止、空谈不实、盲目跟从、忽视积累、脱离实际、追求虚名和敷衍塞责,这些都是对高效、负责任工作的提醒。 8. **领导与同事的监督**:他请求经理和同事的...
5. 应用多媒体工具:案例中提到教师会制作多媒体课件,并使用百度等搜索引擎来搜索端午节相关的图片、歌曲、视频等资料。这不仅丰富了教学内容,也使学生学会了如何利用现代技术手段辅助学习。 6. 引导学生深入探究...
- 在学习过程中,部分教师可能存在浅尝辄止的现象,缺乏深入思考和实际应用的动力。 - 少数教师由于年龄或技术背景的原因,对新技术的接受程度较低,存在一定的畏难情绪。 #### 五、总结与展望 本次教师信息化教学...
一是学生往往对古典诗词的解析浅尝辄止,教师为了教学进度,可能忽视了诗词深层含义的引导,这使得学生未能全面领略诗词之美。因此,教师应注重诗词内容的解读,引导学生从作者的视角理解诗词的意境和情感,确保他们...
9. 多媒体信息:多媒体信息管理与检索系统设计。 10. 房产管理:房产、房租管理与计价信息系统、房产管理系统、房地产销售管理系统、房屋中介管理系统、房屋租赁管理系统。 11. 其他:工资管理信息系统、固定资产及...
4. **教学能力的提升**:培训有助于更新教育理念,提高多媒体运用能力,使教师在教学设计、学案编写和组织讨论等方面更有成效。 5. **自我反思与成长**:培训促使教师认识到自身不足,需要持续学习,以适应教育发展...
网络阅读容易导致浅尝辄止、碎片化的阅读习惯,更适合快速浏览和粗略理解,而传统阅读则更容易引导深度阅读和细致理解。传统阅读载体如书籍,更适合对经典作品进行深度挖掘和反复品味。 两种阅读方式各有优缺点:...
通过情境式教学,如借助多媒体资源展示相关场景,可以使学生更直观地理解文章,增强课堂趣味性。此外,探究式教学也是有效手段,提出与学生生活相关的问题,让他们在阅读中寻找答案,既能引发共鸣,又能提高阅读效率...
- **缺乏深度报道**:新媒体侧重于快速更新,往往牺牲了深度分析,导致多数报道浅尝辄止,缺乏深度和策划。 面对这些挑战,传统纸媒可以采取以下策略: - **强化在线平台**:建立自己的数字化平台,提供即时新闻...
同时,引入流行元素、网络话题,甚至运用多媒体手段,如H5特效或动画,以增强内容的吸引力。 再者,保证内容质量是基础。新闻应具有及时性、准确性和完整性,全面报道事件始末,挖掘新闻背后的故事,提高内容深度和...
在教育信息化环境下,学生应具备自主学习和探究的能力,但现状显示,许多学生在面对信息时缺乏筛选和深度学习的能力,容易浅尝辄止,这对教育信息化的有效实施构成了阻碍。 针对这些问题,推动教育信息化可持续发展...
互联网上的信息库庞大,包含了各种科学知识和多媒体素材,能够提供多感官的刺激,增强学生的学习兴趣。例如,图文并茂的网页设计和生动的视频演示,能够帮助学生直观理解复杂的科学现象,如在“彩虹的秘密”这一课中...
1. 阅读内容广泛但肤浅:由于网络技术的普及,大学生可以接触到各种类型的媒体平台,如微博、微信等,导致他们获取的信息量大、种类多,但往往阅读深度不够,容易陷入浅尝辄止的境地。 2. 主导阅读热点:大学生是新...