Android基础总结.doc(第七节、多媒体应用、通知、对话框、UI )
来源:互联网 发布:武汉淘宝摄影 编辑:程序博客网 时间:2024/09/21 06:35
作者:韩亚飞_yue31313_韩梦飞沙 QQ:313134555
第一节、 多媒体应用、通知、对话框、UI
一、知识概括
1、多媒体的应用操作
2、Android状态通知
3、常见对话框及UI
二、知识总结
多媒体操作流程图
1、多媒体操作
1、音乐播放器的基本操作
MediaPlayer mediaPlayer = new MediaPlayer();
if (mediaPlayer.isPlaying()) {
mediaPlayer.reset();//重置为初始状态}
mediaPlayer.setDataSource("/mnt/sdcard/god.mp3");
mediaPlayer.prepare();
mediaPlayer.start();//开始或恢复播放
mediaPlayer.pause();//暂停播放
mediaPlayer.start();//恢复播放
mediaPlayer.stop();//停止播放
mediaPlayer.release();//释放资源
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
//播出完毕事件
public void onCompletion(MediaPlayer arg0) { mediaPlayer.release(); }});
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
// 错误处理事件
public boolean onError(MediaPlayer player, int arg1, int arg2) {
mediaPlayer.release();
return false;}});
2、音频录音
你可以使用手机进行现场录音,实现步骤如下:
第一步:在功能清单文件AndroidManifest.xml中添加音频刻录权限:
<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>
第二步:编写音频刻录代码:
MediaRecorderrecorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//从麦克风采集声音
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//内容输出格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音频编码方式
recorder.setOutputFile("/mnt/sdcard/itcast.amr");
recorder.prepare();//预期准备
recorder.start(); //开始刻录
...
recorder.stop();//停止刻录
recorder.reset(); //重设
recorder.release(); //刻录完成一定要释放资源
3、歌词操作
4、soundPool:
开发游戏的时候会使用到,可以有效的处理大量的音效使用
1. SoundPool最大只能申请1M的内存空间,这就意味着我们只能用一些很短的声音片段,而不是用它来播放歌曲或者做游戏背景音乐。
2. SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。建议使用这两个方法的时候尽可能多做测试工作,还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。
3. SoundPool的效率问题。其实SoundPool的效率在这些播放类中算是很好的了,但是有的朋友在G1中测试它还是有100ms左右的延迟,这可能会影响用户体验。也许这不能管SoundPool本身,因为到了性能比较好的Droid中这个延迟就可以让人接受了。
在现阶段SoundPool有这些缺陷,但也有着它不可替代的优点,基于这些我们建议大在如下情况中多使用SoundPool:1.应用程序中的声效(按键提示音,消息等)2.游戏中密集而短暂的声音(如多个飞船同时爆炸)
演 示:
public class DemoActivity extends Activity {
int soundid;
SoundPool pool;
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pool = newSoundPool(5, AudioManager.STREAM_MUSIC, 0);
// 这语句代码 是一个异步的操作
soundid =pool.load(this, R.raw.ring, 1); //花费一定的时间 }
public void shoot(Viewview){
// 因为上面异步的加载声音的操作还没完成
pool.play(soundid,1.0f, 1.0f, 0, 0, 1.0f);}}
//play方法中的5个参数分别为:声音ID,左声道,右声道,优先级,播放次数,播放速度pool.play(soundID,leftVolume,rightVolume, priority, loop, rate)。
2、视频播放器
1、视频播放器画面显示
使用MediaPlayer来处理视频内容, 通过SurfaceView来显示视频。
在main.xml布局文件添加用于视频画面绘制的SurfaceView 控件:
<SurfaceVie android:layout_width="fill_parent" android:layout_height="240dip"android:id="@+id/surfaceView" />
SurfaceView surfaceView =(SurfaceView)this.findViewById(R.id.surfaceView);
surfaceView.getHolder().setFixedSize(176, 144); //设置分辨率
/*下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前*/
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.reset();//重置为初始状态
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
/* 设置Video影片以SurfaceHolder播放 */
mediaPlayer.setDisplay(surfaceView.getHolder());
mediaPlayer.setDataSource("/mnt/sdcard/oppo.mp4");
mediaPlayer.prepare();
mediaPlayer.start();//播放
mediaPlayer.pause();//暂停播放
mediaPlayer.start();//恢复播放
mediaPlayer.stop();//停止播放
mediaPlayer.release();//释放资源
视频播放的填充器
holder = sv.getHolder();
/* 下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前 */
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// holder.setFixedSize(width,height);
holder.addCallback(newMyHolderCallback());
视屏的同步加载和异步加载:
加载视频的时候,如果视频过大,加载的时间较长,可以使用一部加载,但是一部加载需要
3、播放网络视频:
播放网络视频只能播放渐进式格式视频(3gp...)和流媒体视频(rtsp)
流媒体通常使用H246类型视频流。
public classPlayonlineActivity extends Activity {
EditTextet_path;
SurfaceViewsv;
SurfaceHolderholder;
MediaPlayerplayer
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et_path = (EditText)this.findViewById(R.id.editText1);
sv = (SurfaceView)this.findViewById(R.id.sv);
holder = sv.getHolder();
/*下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前 */
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void play(View view){
try {
String path =et_path.getText().toString().trim();
player = new MediaPlayer();
player.setDataSource(path);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDisplay(holder);
player.prepareAsync();
player.setOnPreparedListener(newOnPreparedListener() {
publicvoid onPrepared(MediaPlayer mp) {
player.start();}});
}catch (Exception e) {
System.out.println("error");
e.printStackTrace();}}}
3、摄像头的使用
1、基本操作
摄像头主要用于获取图像数据和视频数据。
在main.xml布局文件添加用于显示取景画面的SurfaceView 控件:
<SurfaceView android:layout_width="fill_parent"android:layout_height="240dip"android:id="@+id/surfaceView" />
SurfaceView surfaceView =(SurfaceView)this.findViewById(R.id.surfaceView);
surfaceView.getHolder().setFixedSize(176, 144); //设置分辨率
/*下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前*/
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Camera camera = Camera.open();
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(display.getWidth(),display.getHeight());//设置预览照片的大小
parameters.setPreviewFrameRate(3);//每秒3帧
parameters.setPictureFormat(PixelFormat.JPEG);//设置照片的输出格式
parameters.set("jpeg-quality", 85);//照片质量
parameters.setPictureSize(display.getWidth(),display.getHeight());//设置照片的大小
camera.setParameters(parameters);
camera.setPreviewDisplay(surfaceView.getHolder());//通过SurfaceView显示取景画面
camera.startPreview();//开始预览
camera.autoFocus(null);//自动对焦
camera.takePicture(null, null, null, jpegCallback);//拍照片
camera.stopPreview();//停止预览
camera.release();//释放摄像头
2、刻录视频
第一步:在功能清单文件AndroidManifest.xml中添加音频刻录和照相机权限:
<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>
<uses-permissionandroid:name="android.permission.CAMERA"/>
<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
第二步:编写音频刻录代码:
recorder.reset();
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //从照相机采集视频
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setVideoSize(320, 240);
recorder.setVideoFrameRate(3); //每秒3帧
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); //设置视频编码方式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/mnt/sdcard/itcast.3gp");
recorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
recorder.prepare();//预期准备
recorder.start();//开始刻录
...
recorder.stop();//停止刻录
recorder.release(); //刻录完成一定要释放资源
4、界面状态
1)Android的状态通知---Notification
如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息。
发送消息的代码如下:
//获取通知管理器
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
int icon = android.R.drawable.stat_notify_chat;
long when = System.currentTimeMillis();
//新建一个通知,指定其图标和标题
Notification notification = new Notification(icon, null, when);//第一个参数为图标,第二个参数为短暂提示标题,第三个为通知时间
notification.defaults = Notification.DEFAULT_SOUND;//发出默认声音
Intent openintent = new Intent(this, OtherActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,openintent, 0);//当点击消息时就会向系统发送openintent意图
notification.setLatestEventInfo(this, “标题”, “我是内容",contentIntent);
mNotificationManager.notify(0, notification);//第一个参数为自定义的通知唯一标识
public class DemoActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void click(Viewview){
//1.Get a reference to the NotificationManager:
// 得到一个notification的服务
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
// 2.Instantiate theNotification:
Notification notification = newNotification(R.drawable.ic_launcher, "tickertext",System.currentTimeMillis());
notification.sound= Uri.fromFile(newFile("/sdcard/haha.mp3"));
notification.flags = Notification.FLAG_NO_CLEAR;
//3.Define the notification's message and PendingIntent:
Intent intent = new Intent(this,DemoActivity.class);
PendingIntentcontentIntent = PendingIntent.getActivity(this, 0, intent, 0);
notification.setLatestEventInfo(this,"notife 标题","noti 正文",contentIntent);
//4.Pass the Notification to the NotificationManager:
manager.notify(0, notification);
}
}
5、常见对话框
文本提示框:setpositiveButton
选择对话框:setItem
单选按钮框:setSingleChoiceItem
必须手动指定关闭
多选对话框:setMultChoiceItem
进度条:progressBar
调用setProgressStyle()方法设置进度对话框风格。有两种风格:
ProgressDialog.STYLE_SPINNER 旋体进度条风格 (为默认风格)
ProgressDialog.STYLE_HORIZONTAL 横向进度条风格
演示:
switch (v.getId()) {
caseR.id.button1: // 确定取消的对话框
//1.获取一个对话框的创建器
AlertDialog.Builderbuilder = new Builder(DemoActivity.this);
//2.所有builder设置一些参数
builder.setTitle("对话框标题");
builder.setMessage("提示 是否退出呀?");
builder.setPositiveButton("确定", newDialogInterface.OnClickListener(){
publicvoid onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),"确定被点击",0).show();}});
builder.setNegativeButton("取消", newDialogInterface.OnClickListener() {
publicvoid onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),"取消被点击",0).show();}});
AlertDialog dialog = builder.create();
dialog.show();
break;
caseR.id.button2: //pick的对话框
//1.获取一个对话框的创建器
AlertDialog.Builderbuilder2 = new Builder(DemoActivity.this);
builder2.setTitle("pick一个人");
finalString [] arr = new String[]{"张三","李四","王五"};
builder2.setItems(arr,new DialogInterface.OnClickListener(){
publicvoid onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),arr[which], 0).show();}});
builder2.create().show();
break;
caseR.id.button3: //带选择 按钮的单选对话框
//1.获取一个对话框的创建器
AlertDialog.Builderbuilder3 = new Builder(DemoActivity.this);
builder3.setTitle("选择一个颜色");
finalString [] items = new String[]{"红色","蓝色","黄色"};
builder3.setSingleChoiceItems(items,1, new DialogInterface.OnClickListener(){
publicvoid onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),items[which], 0).show();
dialog3.dismiss();
}});
dialog3= builder3.create();
dialog3.show();
break;
caseR.id.button4: //带选择多个 按钮的多选对话框
//1.获取一个对话框的创建器
AlertDialog.Builderbuilder4 = new Builder(DemoActivity.this);
builder4.setTitle("选择若干个颜色");
finalString [] items4 = new String[]{"红色","蓝色","黄色"};
builder4.setMultiChoiceItems(items4,new boolean[]{false,false,false}, newDialogInterface.OnMultiChoiceClickListener(){
publicvoid onClick(DialogInterface dialog, int which,
booleanisChecked) {
Toast.makeText(getApplicationContext(),items4[which] + " 选择状态"+ isChecked, 0).show();}});
builder4.setPositiveButton("确定", newDialogInterface.OnClickListener() {
publicvoid onClick(DialogInterface dialog, int which) {
}});
dialog3= builder4.create();
dialog3.show();
break;
caseR.id.button5 : //进度条对话框
ProgressDialogpd = new ProgressDialog(this);
pd.setTitle("提示");
pd.setMessage("正在获取数据");
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMax(100);
pd.show();
pd.setProgress(50);
break;}}
@Override
protectedvoid onPause() {
System.out.println("onpause");
super.onPause();
}
6、常用UI
RadioButton
要完成单选框显示,我们需要使用到RadioGroup和RadioButton(单选框),RadioGroup用于对单选框进行分组,相同组内的单选框只有一个单选框能被选中。(例子代码请见下方备注栏)
RadioGroup.check(R.id.dotNet);将id名为dotNet的单选框设置成选中状态。
(RadioButton) findViewById(radioGroup.getCheckedRadioButtonId());//获取被选中的单选框。
RadioButton.getText();//获取单选框的值
调用setOnCheckedChangeListener()方法,处理单选框被选择事件,
把RadioGroup.OnCheckedChangeListener实例作为参数传入
CheckBox
每个多选框都是独立的,可以通过迭代所有多选框,然后根据其状态是否被选中再获取其值。
CheckBox.setChecked(true);//设置成选中状态。
CheckBox.getText();//获取多选框的值
调用setOnCheckedChangeListener()方法,处理多选框被选择事件,
把CompoundButton.OnCheckedChangeListener实例作为参数传入
Spinner
Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());获取下拉列表框的值
调用setOnItemSelectedListener()方法,处理下拉列表框被选择事件,
把AdapterView.OnItemSelectedListener实例作为参数传入
SeekBar
SeekBar.getProgress()获取拖动条当前值
调用setOnSeekBarChangeListener()方法,处理拖动条值变化事件,
把SeekBar.OnSeekBarChangeListener实例作为参数传入
Menu
重写Activity的onCreateOptionsMenu(Menu menu)方法,该方法用于创建选项菜单,在用户按下手机的“Menu”按钮时就会显示创建好的菜单,在onCreateOptionsMenu(Menumenu)方法内部可以调用Menu.add()方法实现菜单的添加。
重写Activity的onMenuItemSelected()方法,该方法用于处理菜单被选择事件
通过手机上提供的“MENU”按钮可以打开菜单,如果希望通过代码打开菜单,可以调用Activity的openOptionsMenu()方法。
ProgressBar
在代码中操作进度条:
ProgressBar.setMax(100);//设置最大刻度
ProgressBar.setProgress(0);//设置进度条的当前刻度,如果进度条的最大刻度为100,当前刻度为50,进度条将进行到一半。
AutoCompleteTextView
- Android基础总结.doc(第七节、多媒体应用、通知、对话框、UI )
- Android个人每天总结.doc(day08 多媒体)
- Android应用开发揭秘(笔记) 第七章 多媒体开发
- Android基础总结.doc(第八节、Android扩展知识)
- Android基础总结.doc(第二节、Android文本数据操作)
- Android个人每天总结.doc(day05网络应用)
- 2.Android基础总结.doc(第一节、基本知识了解)
- Android多媒体之通知
- Android多媒体应用——通知的使用(Notification)
- Android Multimedia框架总结(五)多媒体基础概念
- Android Multimedia框架总结(五)多媒体基础概念
- Android Multimedia框架总结(五)多媒体基础概念
- Android基础总结.doc(第四节、访问网络的操作)
- Android基础总结.doc(第六节、Activity组件的启动模式、广播、服务组件 )
- 安卓多媒体应用-通知
- 【Android基础】多媒体编程部分总结
- UI基础-MVC、通知
- 多媒体交互应用基础(1)
- Android基础总结.doc(第四节、访问网络的操作)
- Android基础总结.doc(第二节、Android文本数据操作)
- OkHttp3源码阅读2之请求和响应数据的解析
- Java IO(九):ByteArray
- php curl_init函数用法
- Android基础总结.doc(第七节、多媒体应用、通知、对话框、UI )
- Android基础总结.doc(第六节、Activity组件的启动模式、广播、服务组件 )
- Android基础总结.doc(第八节、Android扩展知识)
- 打印一棵二叉树,要求从上往下打印,每一层从左往右打印
- Android基础总结.doc(第五节、多线程下载、activity声明周期、意图操作)
- ubuntu上安装docker-compose遇到Permission denied问题
- <DATA-轉載>【数据科学】教你成为数据科学“大咖”!
- linux之scp命令
- The Triangle(数塔)