通知之 Pending播放多媒体调用相册摄像头
这里写目录标题
- 安装应用程序到手机
- 使用通知
- 通知的基本用法
- PendingIntent
- 跳转活动
- 设置未取消前通知一直在页面上的两种方法
- 通知的进阶技巧
- 通知发出时播放音频
- 通知时振动
- 控制LED灯显示
- 通知的默认效果
- 通知的高级技巧
- setStyle
- 调用摄像头和相册
- 调用摄像头拍照
- 从相册中选择图片
- 播放多媒体文件
- 播放音频
- 播放视频
安装应用程序到手机
- 打开其他选项,找到开发者选项,打开USB调试,如果AS一直识别不到手机,检查一下SDK Tools有个USB Devier是否下载了,下载一个360手机助手或者豌豆荚
使用通知
通知的基本用法
//getSystemService()接受一个字符串,确定获取系统的哪个服务
case R.id.send_notice:NotificationManager manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);Notification notification=new NotificationCompat.Builder(context).setContentTitle("This is Content title");.setContentText("This is Content text");//指定被创建时间,以毫秒为单位.setWhen(System.currentTimeMillis());//设置通知的小图标.setSmallIcon(R.drawable.small_icon);//设置大图标,下滑状态栏时即可见.setLargeIcon(BitmapFactory.decodeResource(getResource(),R.drawable.large_icon));//decodeResourse(Resource,int id) 从指定id,指定文件中解析Bitmap对象,降低相片像素.build();//显示一个通知manager.notify(1,notification);
PendingIntent
与intent异同:
同:都用于启动活动,启动服务即发送广播
异:intent趋向于 立即执行,pendingIntent等到合适时机才执行,可理解为延迟执行提供静态方法
- getActivity() ,getBroadcast() ,getService()
- 参数:Context,0,Intent对象,PendingIntent行为
PendingIntent行为有:FLAG_ONE_SHOT ,FALG_NO_CREATE ,FLAG_CANCEL_CURRENT 和 FLAG_UPDATE_CURRENT
跳转活动
//创建新活动 NotificationActivity//MainActivity
//case R.id.send_notice://表达启用对象意图Intent intent=new Intent(this,NotificationActivity.class);//把intent对象放到pendIntent里PendingIntent pi=PengdingIntent.getActivity(this,0,intent,0);....setContentIntent(pi)
设置未取消前通知一直在页面上的两种方法
NotificationCompat.Builder 连缀
SetAutoCancel(true)
传入true 表示点击这个通知时,通知会取消掉在NotificationActivity中
public void onCreate(...){...NotificationManager manager=(NotificationManager)getSystemsService(NOTIFICATION_SERVICE);//上文 notify(1,notification),想取消那条消息,传入哪条消息id即可manager.canncel(1);
}
通知的进阶技巧
通知发出时播放音频
.setSound(Uri.fromFile(new File("/System/media/audio/rightones/Luna.ogg")))
通知时振动
- 开启权限
<uses-permission android:name="android.permission.VIBRATE"/>
- 设置
//长整型数组,为偶数的下标表示静止,奇数为振动
//让手机振动1s,停止1s,振动1s,写法如下:
.setVibrate(new Long[]{0,1000,1000,1000})
控制LED灯显示
//颜色,亮的时间,灭的时间,以毫秒为单位.setLights(Color.GREEN,1000,1000);
通知的默认效果
.setDefaults(NotificationsCompat.DEFAULT_ALL)
通知的高级技巧
setStyle
- BigTextString 封装长文字信息
//调用BIigTextStyle的bigText传入即可.setStyle(new NotificationCompat.BigTextStyle().bigText("If you can face them head on,you will find out how strong you really are,which is from Mary.Alice"))
- BigPictureStyle
//decodeResource解析成Bitmap对象传入bigPicture
.setStyle(new NotificationCompat.BigPictureStyle.bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.big_image)))
调用摄像头和相册
调用摄像头拍照
设置布局文件
Button 和 imageView,后者用于将拍摄的图片显示出来MainActivity
public class MainActivity extends AppCompatActivity{public static final int TAKE_PHOTO=1;private ImageView picture;private Uri imageUri;protected void onCreate(Bundle saveInstance){super.onCreate(saveInstance);setContentView(R.id.layout_main);//获取Button,imageVIew实例BUtton takePhoto=(Button)findViewById(R.id.take_photo);picture=(ImageView)findViewById(R.id.picture);//注册点击事件takePhoto.setOnClickListener(new View.OnClickListener(){public void onClick(View v){//创建文件,存放图片//getExternalCacheDir找到SD卡应用关联缓存目录//Android 6.0之后读写SD卡变成危险权限,储存在SD应用相关缓存目录可跳过运行时权限处理这一步File outputImage=new File(getExternalCacheDir()."output_image.jpg");try{if(outputImage.exists()){outputImage.delete();}outputImage.createNewFile();}catch(IOException e){e.printStackTrace();}//Build.VERSION.SDK_INT表示操作系统版本号if(Build.VERSION.SDK_INT>=24){imageUri=FileProvider.getUriForFile(MainActivity.this,"com.example.cameraablebumtest.fileprovider",outputImage);}else{imageUri=Uri.fromFile(outputImage);}//启动照相机程序//构建intent对象,指定actionIntent intent=new Intent("android.media.action.IMAGE_CAPTURE");//putExtra指定输出图片地址intent.puExtra(MediaStore.EXTRA_OUTPUT,imageUri);//启动活动startActivityForResult(intent,TYPE_PHOTO);}});}protected void onActivityResult(int requestCode,int resultCode,Intent data){switch(requestCode){//拍照成功,调用BigmapFactory解析图片,在image_view中显示出来case TAKE_PHOTO:if(resultCode==RESULT_OK){try{//将拍摄的图片显示出来Bitmap bitmap=new BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));picture.setImageBitmap(bitmap);}catch(IOExeption e){e.printStackTrace();}}break;default:break; }}
}
从相册中选择图片
-startActivityForResult(Intent intent,int requestCode)打开新活动,新活动关闭后,向新活动传递数据,并通过重写onActivityResult()获取数据
//指定intent的action为GET_CONTENT
//intent设置参数
//startActivityForResultpublic static final int CHOOSE_PHOTO=2;...//正常申请权限操作chooseFormAlbum.setOnClickListener(new View.OnClickListener(){public void onClick(View v){if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);}else{openAlbum();}});}public void openAlbum(){Intent intent=new Intent("android.intent.action.GET_CONTENT");intent.setType("image/*"); //选择图片//setType("audio/*") 选择音频//setType("video/*") 选择视频startActivityForResult(intent,CHOOSE_PHOTO);} //请求权限public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){switch(requestCode){case 1:if(grandResults.length()>0&&grandResults[0]==PackageManager.PERMISSION_GRANTED){openAlbum();}else{Toast...}break;... }}//处理从相册中选择的图片protected void onActivityResult(int requestCode,int resultCode,Intent data){switch(requestCode){..case CHOOSE_PHOTO:if(resultCode==RESULT_OK){//查看手机版本号/* if(Builder.VERSION.SDK_INT>=19){//Android版本小于4.4,因为这个版本比较老旧了//我就不介绍这个版本的处理了handleImageOnKitKat(data);}else{ */handleImageBeforeKitKat(data);//}}break;...}}...private void handleImageBeforeKitKat(Intent data){//设uri实例,拿到图片信息Uri uri=data.getdata();//getImagePath获真实路径String imagePath=getImagePath(uri,null);//让图片显示到界面上displayImage(imagePath);}//该部分解答,可见下文链接:内容提供器private String getImagePath(Uri uri,String selection){String path=null;Cursor cursor=getContentResolver().query(uri,null,selection,null,null);if(cursor!=null){if(cursor.moveToFirst()){//getColumnIndex获取该列数据索引path=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));}cursor.close();}return path;}private void displayImage(String imagePath){if(imagePath!=null){//解析成bitmap形式Bitmap bitmap=BitmapFactory.decodeFile(imagePath);picture.setImageBitmap(bitmap);}else{Toast...}}
}
内容提供器
播放多媒体文件
播放音频
- MediaPlayer类中常用的控件方法
- 若对于申请权限相关知识请参见
权限设置 - 代码
//思路为: 建对象,申请权限,case,销毁资源//创建MediaPlayer对象
private MediaPlayer musicPlayer=new MediaPlayer();public on onCreate......//SD卡访问权限if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(MainActivity.class,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);}else{initMediaPlayer(); //初始化MediaPlayer}private void initMediaPlayer(){try{File file=new File(Environment.getExternalStorageDirectory(),"music.mp3");//setDataSource 设置音频文件路径mediaPlayer.setDataSource(file.getPath());//调用prepare()使MediaPlayer进入准备状态--与Resume同mediaPlayer.prepare();}catch(Exception e){e.printStackTrace();}}private void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grandResults){if(grandResults.length>0&&grandResults[0]==PackageManger.PERMISSION_GRANTED){initMediaPlayer();}else{...//拒绝申请 调用finish将程序关掉finish();}...}public void onClick(View v){switch(View v){case R.id.play://start开始播放音频mediaPlayer.start();break;//pause暂停播放case R.id.pause:mediaPlayer.pause();break;//reset停止播放--与stop同,在Git中用作撤销操作case R.id.stop://均先需判断一下有没有在播放if(mediaPlayer.isPlaying()){ //reset() 将MediaPlayer重新设成了刚刚创建的状态mediaPlayer.reset(); initMediaPlayer();} }//将MediaPlayer相关资源关掉protected void onDestory(){super.onDestory();if(mediaPlayer!=null){mediaPlayer.stop();mediaPlayer.release();}}}
- AndroidManifest.xml
<uses-permission android:name="android:permission.WRITE_EXTERNAL_STORAGE">
播放视频
- 视频播放器常用方法
与音频相比,少了release,stop,reset,音频设置要播放的文件位置方法setDataResource
变为了setVideoPath
- 代码
//播放视频与播放音频原理相通,只有小部分代码有差别:...private void initViedoPath(){File file=... //获取文件对象videoView.setVideoPath(file.getPath);}protected void onDestory(){super.onDestory();if(videoView!=null){//如果是音频 是 stop,release/*mediaPlayer.stop();mediaPlayer.release();*/videoView.suspend();}}
- 申请权限同音频
本篇博客浅谈了 如何真机测试, 通知使用技巧,调用摄像头,从相册选取图片,播放音频 及 视频文件这几方面内容,如果对您有帮助的话,是我的荣幸,谢谢观看~不忘点个赞哟♥
通知之 Pending播放多媒体调用相册摄像头相关推荐
- Android多媒体实现拍照,调用相册,音频等功能
加入消息提醒功能,每次发消息,使用通知显示人名.头像和内容 加入头像设置功能,支持拍照选取和从相册选取,裁剪 加入播放器功能,支持播放音乐和视频 首先看一下项目的总体: 项目名为Total,它是由三部 ...
- 使用HTML5+调用手机摄像头和相册
前言: 前端时间使用HTML5做了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了不少时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法 ...
- 微信公众号H5开发——调用相册和摄像头并上传服务器
之前的文章介绍了关于微信JSSDK调用,下面介绍一下其中的一个最常用的功能--调用相册和摄像头 使用此功能之前先参考:微信JSSDK 在通过了config接口验签成功之后,我们就可以调用微信JSSDK ...
- html调起苹果手机摄像头_使用HTML5+调用手机摄像头和相册
前言: 前端时间使用HTML5作了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了很多时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法 ...
- mui教程2——窗口管理、调用相册、调用摄像头、调用重力感应、微信朋友圈界面(仿制)分析
一.窗口管理 1,页面初始化 在app开发中,若要使用HTML5+扩展api,必须等plusready事件发生后才能正常使用,mui将该事件封装成了mui.plusReady()方法,涉及到HTML5 ...
- java 调用手机相册_微信公众号调用手机摄像头拍照和本地相册
[实例简介] 微信公众号调用手机摄像头拍照和本地相册,上传服务器 [实例截图] [核心代码] 微信公众号调用手机摄像头拍照和本地相册(2) └── 微信公众号调用手机摄像头拍照和本地相册 └── 微信 ...
- 使用JS调用手机摄像头和相册
Html <h2 class="title-detail">图片描述</h2> <input type="hidden" id=& ...
- ios开发学习笔记--调用相册或相机(UIImagePickerController)
Ios开发相册和相机的使用-UIImagePickerController 在开发中,有时候需要获取用户的相册或者调用相机采集图片,比如APP的头像,此时可以使用UIImagePickerContro ...
- 纯JavaScript实现的调用设备摄像头并拍照的功能
这篇文章本来不在Jerry计划内的,咱们SAP中国研究院今天已经正式上班了,Jerry也回到工作岗位开始搬砖了. 今天一位同事问我关于本文标题描述的功能如何实现,Jerry在网上随便搜了一下,类似的例 ...
最新文章
- java 循环时间调用 程序(转)
- getopt和getopt_long的使用
- python变量命名规则思维导图_Python思维导图详解
- ubuntu20.04安裝迅雷
- Linux基本目录解释
- python batch_size_python 實現動態 batch size,多張圖片如何堆疊轉成指針
- You can't specify target table 'TS_AUTH_ADMIN' for update in FROM clause记录
- PLC与常用设备的连接
- Crossing Road Simulation
- uni-app实现android,ios打包过程详解
- Python —— 爬取成果微博相册图片 ——明星
- LINUX系统开机后出现assuming drive cache:write through的办法
- 步进电机、伺服电机的接线说明书、示意图
- visualhunt - 免注册直接下载优质免费商用图片的好用网站
- 搜索官方的一篇相关性文章分享
- RK3566调试VL53L01
- 山东科技大学计算机学院教科办电话,山东科技大学教务处
- 5G与4G空口协议栈的区别
- 论文阅读:A KEYPOINT TRANSFORMER TO DISCOVER SPINE STRUCTURE FOR COBB ANGLE ESTIMATION
- How to Get More Grit in Your Life (Rebroadcast)
热门文章
- 关爱码农成长:关于写代码二三事
- PowerDesigner -介绍
- Frenet坐标系下横纵向轨迹决策规划(SL投影及ST投影)及Apollo决策算法解析
- 计算机网络——链路传输时延/速率和传播时延/速率的区分
- 三菱服务器报警je系列c01,MR-JE-70A手册三菱伺服放大器MR-JE-70A故障排除篇操作手册 - 广州凌控...
- PMP英文报名时,如何描述自己的项目经验?
- HTML+CSS+JS520告白表白模板在线制作(七夕情人节表白网页代码)
- JS特效——鼠标点击特效
- Jo——一个简单HTML5移动框架介绍
- 两台pc如何高速度传输大文件