这里写目录标题

  • 安装应用程序到手机
  • 使用通知
    • 通知的基本用法
      • 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播放多媒体调用相册摄像头相关推荐

  1. Android多媒体实现拍照,调用相册,音频等功能

    加入消息提醒功能,每次发消息,使用通知显示人名.头像和内容 加入头像设置功能,支持拍照选取和从相册选取,裁剪 加入播放器功能,支持播放音乐和视频 首先看一下项目的总体: 项目名为Total,它是由三部 ...

  2. 使用HTML5+调用手机摄像头和相册

    前言: 前端时间使用HTML5做了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了不少时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法 ...

  3. 微信公众号H5开发——调用相册和摄像头并上传服务器

    之前的文章介绍了关于微信JSSDK调用,下面介绍一下其中的一个最常用的功能--调用相册和摄像头 使用此功能之前先参考:微信JSSDK 在通过了config接口验签成功之后,我们就可以调用微信JSSDK ...

  4. html调起苹果手机摄像头_使用HTML5+调用手机摄像头和相册

    前言: 前端时间使用HTML5作了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了很多时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法 ...

  5. mui教程2——窗口管理、调用相册、调用摄像头、调用重力感应、微信朋友圈界面(仿制)分析

    一.窗口管理 1,页面初始化 在app开发中,若要使用HTML5+扩展api,必须等plusready事件发生后才能正常使用,mui将该事件封装成了mui.plusReady()方法,涉及到HTML5 ...

  6. java 调用手机相册_微信公众号调用手机摄像头拍照和本地相册

    [实例简介] 微信公众号调用手机摄像头拍照和本地相册,上传服务器 [实例截图] [核心代码] 微信公众号调用手机摄像头拍照和本地相册(2) └── 微信公众号调用手机摄像头拍照和本地相册 └── 微信 ...

  7. 使用JS调用手机摄像头和相册

    Html <h2 class="title-detail">图片描述</h2> <input type="hidden" id=& ...

  8. ios开发学习笔记--调用相册或相机(UIImagePickerController)

    Ios开发相册和相机的使用-UIImagePickerController 在开发中,有时候需要获取用户的相册或者调用相机采集图片,比如APP的头像,此时可以使用UIImagePickerContro ...

  9. 纯JavaScript实现的调用设备摄像头并拍照的功能

    这篇文章本来不在Jerry计划内的,咱们SAP中国研究院今天已经正式上班了,Jerry也回到工作岗位开始搬砖了. 今天一位同事问我关于本文标题描述的功能如何实现,Jerry在网上随便搜了一下,类似的例 ...

最新文章

  1. java 循环时间调用 程序(转)
  2. getopt和getopt_long的使用
  3. python变量命名规则思维导图_Python思维导图详解
  4. ubuntu20.04安裝迅雷
  5. Linux基本目录解释
  6. python batch_size_python 實現動態 batch size,多張圖片如何堆疊轉成指針
  7. You can't specify target table 'TS_AUTH_ADMIN' for update in FROM clause记录
  8. PLC与常用设备的连接
  9. Crossing Road Simulation
  10. uni-app实现android,ios打包过程详解
  11. Python —— 爬取成果微博相册图片 ——明星
  12. LINUX系统开机后出现assuming drive cache:write through的办法
  13. 步进电机、伺服电机的接线说明书、示意图
  14. visualhunt - 免注册直接下载优质免费商用图片的好用网站
  15. 搜索官方的一篇相关性文章分享
  16. RK3566调试VL53L01
  17. 山东科技大学计算机学院教科办电话,山东科技大学教务处
  18. 5G与4G空口协议栈的区别
  19. 论文阅读:A KEYPOINT TRANSFORMER TO DISCOVER SPINE STRUCTURE FOR COBB ANGLE ESTIMATION
  20. How to Get More Grit in Your Life (Rebroadcast)

热门文章

  1. 关爱码农成长:关于写代码二三事
  2. PowerDesigner -介绍
  3. Frenet坐标系下横纵向轨迹决策规划(SL投影及ST投影)及Apollo决策算法解析
  4. 计算机网络——链路传输时延/速率和传播时延/速率的区分
  5. 三菱服务器报警je系列c01,MR-JE-70A手册三菱伺服放大器MR-JE-70A故障排除篇操作手册 - 广州凌控...
  6. PMP英文报名时,如何描述自己的项目经验?
  7. HTML+CSS+JS520告白表白模板在线制作(七夕情人节表白网页代码)
  8. JS特效——鼠标点击特效
  9. Jo——一个简单HTML5移动框架介绍
  10. 两台pc如何高速度传输大文件