`

多媒体的浅尝辄止

阅读更多
下面简单讲几种Android的多媒体技术,音频,视频,摄像头,录音。介绍的内容很简单,因为暂时没有用到,这是简单的学习一下。

首先讲下多媒体资源的位置:
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);
	}

}
分享到:
评论

相关推荐

    浅谈多媒体技术应用于高中政治教学的利弊.docx

    如果教师未能有效引导,学生可能只会浅尝辄止,无法深入理解和掌握知识。 3. 缺乏互动与反馈:多媒体课堂往往过于注重视听效果,而忽略了传统的问答、讨论等互动环节,这可能导致学生的学习深度不足,教师也难以...

    《网页设计与多媒体技术》课程考核改革方案宣贯.pdf

    如此细致的评分标准有助于引导学生全面、系统地完成研究工作,避免了题目的浅尝辄止和内容的表面化。 这一改革方案的实施,对于学生而言,意味着他们要更加主动地参与到学习过程中,通过自主研究和实践操作,他们...

    新课改下农村初中历史教学信息化的运用.docx

    久而久之,学生可能会失去对历史学科的兴趣,甚至形成浅尝辄止的学习习惯。 ##### 2. 多媒体使用过频导致学生兴趣减退 多媒体教学作为一种现代化的教学工具,为历史教学带来了前所未有的便利性和多样性。然而,如果...

    信息化教学利弊谈.pdf

    学生可能忙于应对屏幕上快速闪过的信息,没有足够的时间进行笔记或深入思考,导致知识的浅尝辄止。这显然与信息化教学初衷相悖,即提高学生的自主学习能力和创新思维。 最后,制作高质量的多媒体课件确实需要投入...

    信息化教学在高中英语教学中的作用探讨.docx

    然而,尽管信息化教学有诸多优势,教师仍需注意以下几点:一是要确保技术的合理运用,避免技术滥用导致教学内容的浅尝辄止;二是要持续更新和优化教学资源,以适应学生的需求和兴趣变化;三是要注重培养学生的自主...

    信息化技术在中职汽车维修实训教学中的应用.docx

    然而,部分教师过于依赖多媒体技术,忽视了教材的实际应用,导致教学内容浅尝辄止,重点不突出。因此,教师应当提升自身的专业素养,合理运用信息化工具,确保教学内容深入且有针对性。 另一方面,传统的评价模式在...

    商务英语教学中计算机网络利弊探讨.doc

    还有,过度依赖网络可能导致学生缺乏深度学习,浅尝辄止,缺乏系统性和连贯性的学习。 因此,在商务英语教学中,计算机网络应作为辅助工具,与传统教学相辅相成。教师需引导学生合理利用网络资源,同时注重培养学生...

    部门新人工作述职报告例文.docx

    7. **工作原则**:列出了一些应避免的行为,如满足于浅尝辄止、空谈不实、盲目跟从、忽视积累、脱离实际、追求虚名和敷衍塞责,这些都是对高效、负责任工作的提醒。 8. **领导与同事的监督**:他请求经理和同事的...

    走进端午节--案例.pdf

    5. 应用多媒体工具:案例中提到教师会制作多媒体课件,并使用百度等搜索引擎来搜索端午节相关的图片、歌曲、视频等资料。这不仅丰富了教学内容,也使学生学会了如何利用现代技术手段辅助学习。 6. 引导学生深入探究...

    教师信息化教学实用技术全员培训总结.docx

    - 在学习过程中,部分教师可能存在浅尝辄止的现象,缺乏深入思考和实际应用的动力。 - 少数教师由于年龄或技术背景的原因,对新技术的接受程度较低,存在一定的畏难情绪。 #### 五、总结与展望 本次教师信息化教学...

    小学语文古典诗词审美教学探究

    一是学生往往对古典诗词的解析浅尝辄止,教师为了教学进度,可能忽视了诗词深层含义的引导,这使得学生未能全面领略诗词之美。因此,教师应注重诗词内容的解读,引导学生从作者的视角理解诗词的意境和情感,确保他们...

    计算机科学与技术专业毕业论文选题与写作要求及参考题目.docx

    9. 多媒体信息:多媒体信息管理与检索系统设计。 10. 房产管理:房产、房租管理与计价信息系统、房产管理系统、房地产销售管理系统、房屋中介管理系统、房屋租赁管理系统。 11. 其他:工资管理信息系统、固定资产及...

    课程标准HTML5网页编程.doc

    对于JavaScript的学习,课程并非浅尝辄止,而是侧重于使学生能够阅读和理解代码,从而进一步增强编程能力。 课程评价方式同样注重学生职业能力的养成,重点在于过程与结果的结合。评价方式涵盖多种元素,不仅包括对...

    小议新媒体环境下广播电视新闻编辑如何提升编辑质量.docx

    同时,引入流行元素、网络话题,甚至运用多媒体手段,如H5特效或动画,以增强内容的吸引力。 再者,保证内容质量是基础。新闻应具有及时性、准确性和完整性,全面报道事件始末,挖掘新闻背后的故事,提高内容深度和...

    教育信息化可持续发展能力建设问题.docx

    在教育信息化环境下,学生应具备自主学习和探究的能力,但现状显示,许多学生在面对信息时缺乏筛选和深度学习的能力,容易浅尝辄止,这对教育信息化的有效实施构成了阻碍。 针对这些问题,推动教育信息化可持续发展...

    网络环境下的小学科学探究学习.doc

    互联网上的信息库庞大,包含了各种科学知识和多媒体素材,能够提供多感官的刺激,增强学生的学习兴趣。例如,图文并茂的网页设计和生动的视频演示,能够帮助学生直观理解复杂的科学现象,如在“彩虹的秘密”这一课中...

    高校图书馆立体阅读实践思考.doc

    1. 阅读内容广泛但肤浅:由于网络技术的普及,大学生可以接触到各种类型的媒体平台,如微博、微信等,导致他们获取的信息量大、种类多,但往往阅读深度不够,容易陷入浅尝辄止的境地。 2. 主导阅读热点:大学生是新...

    如何构建朴素和谐高效的高职思想政治理论课堂.pdf

    多媒体和网络技术可以辅助教学,但不应成为课堂的主角,而应服务于教学目标。过度的课堂活动可能会导致学生对知识的浅尝辄止,而忽视深度学习。 3. 教学策略:教师需引导学生积极参与,而非仅仅做旁观者。通过阅读...

    信息技术环境下创设有效教学情境的课例研究报告报告课题实施计划方案.doc

    我校拥有良好的信息技术装备,所有教室配备多媒体教学设备,教师具有一定的信息技术素养,这为我们探索如何有效利用信息技术创设教学情境提供了基础。通过“信息技术环境下创设有效教学情境的课例研究”,我们期望...

    低效和无效的十种课堂.doc

    1. 浮光掠影型课堂:这类课堂缺乏明确的教学重点和难点,导致教学内容浅尝辄止,学生难以深入理解和掌握知识。教师应确保每一堂课都有清晰的教学目标,突出重点,解决难点,以确保教学的有效性。 2. 跑冒滴漏型课堂...

Global site tag (gtag.js) - Google Analytics