《第一行代码--Android》读书笔记之使用通知和多媒体

使用通知(Notification)

我发现很多android系统的特色服务都是需要获得~Manager来管理的,比如LocalManager(获取定位服务),SensorManager(获取光照传感器服务)等等。

  • 通知属于系统的特色服务,需要一个NotificationManager来管理。
    NotificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
  • 获取Notification对象实例,配置好Notification的各种属性,比如图标,标题,内容。

    要先响应Notification的点击事件,需要借助一个PendingIntent类。Pending 未决定的,将要发生的意思。所以顾名思义,PendingIntent就是一个在某个合适的时机去执行某个action,延迟执行的Intent。要获取PendingIntent,可以调用静态方法,PendingIntent.getActivity()、PendingIntent.getBroadcast()和PendingIntent.getService()方法,它们的参数是完全相同的。第一个参数依旧是Context对象,第二个参数通常传入0,第三个参数是Intent对象,设置PendingIntent的意图,第四个参数用于确定PendingIntent的行为。

    • 低于API Level 11版本,也就是Android 2.3.3以下的系统中,setLatestEventInfo()函数是唯一的实现方法。
      Intent intent = new Intent(this,MainActivity);
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);
      notification.setLatestEventInfo(context, title, message, pendingIntent);
      manager.notify(id, notification);
    • 高于API Level 11,低于API Level 16 (Android 4.1.2)版本的系统中,可使用Notification.Builder来配置Notification的各种属性,但要使用getNotification()来得到Notification的实例。
      Notification notification = new Notification.Builder(context)
      .setAutoCancel(true)
      .setContentTitle(“title”)
      .setContentText(“describe”)
      .setContentIntent(pendingIntent)
      .setSmallIcon(R.drawable.ic_launcher)
      .setWhen(System.currentTimeMillis())
      .setOngoing(true);
      notification=builder.getNotification();//This method was deprecated in API level 16. Use build() instead.
    • 高于API Level 16的版本,就可以用Builder和build()函数来配套的方便使用notification了。
      Notification.Builder builder = new Notification.Builder(context)
      .setAutoCancel(true)
      .setContentTitle(“title”)
      .setContentText(“describe”)
      .setContentIntent(pendingIntent)
      .setSmallIcon(R.drawable.ic_launcher)
      .setWhen(System.currentTimeMillis())
      .build();
  • 调用NotificationManager.notify()方法发送通知,调用NotificationManager.cancel()方法关闭通知。

发送短信


  • 获取SMSManager实例
    SMSManager smsmanager=SmsManager.getDefault();
  • 调用SmsManager.sendTextMessage()方法。

接受短信就不总结了,就是自定义一个接受短信消息的广播接收器,在onReceive()方法中编写解释短信的逻辑。

调用摄像头和相册

  • 创建一个图片文件的路径并创建一张空图片,把路径转化成Uri对象。
File outputImage=new File(Environment.getExternalStorageDirectory(),"tempImage.jpg");
                try {
                    if(outputImage.exists())
                        outputImage.delete();
                    outputImage.createNewFile();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                imageuri=Uri.fromFile(outputImage);
                Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
                intent.putExtra(MediaStore.EXTRA_OUTPUT,imageuri);
                startActivityForResult(intent,TAKE_PHOTO);
  • 调用startActivityForResult()启动拍照程序
  • 在回调函数onActivityResult()方法中,进行剪切图片和显示图片的操作。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){
            case TAKE_PHOTO:
                if(resultCode==RESULT_OK){
                    Intent intent=new Intent("com.android.camera.action.CROP");
                    intent.setDataAndType(imageuri,"image/*");
                    intent.putExtra("scale", true);
                    intent.putExtra(MediaStore.EXTRA_OUTPUT,imageuri);
                    startActivityForResult(intent,CROP_PHOTO);
                }
                break;
            case CROP_PHOTO:
                if (resultCode==RESULT_OK){
                    try {
                        Bitmap bitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(imageuri));
                        picture.setImageBitmap(bitmap);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }
                break;
            case CHOOSE_PHOTO:
                if(resultCode==RESULT_OK){
                    Intent intent=new Intent("com.android.camera.action.CROP");
                    intent.setDataAndType(data.getData(),"image/*");
                    //intent.setDataAndType(imageuri,"image/*");
                    intent.putExtra("scale", true);
                    intent.putExtra(MediaStore.EXTRA_OUTPUT,imageuri);
                    startActivityForResult(intent, CROP_PHOTO);
                }
                break;
            default:
                break;
        }
    }
File outputImage=new File(Environment.getExternalStorageDirectory(),"output_Image.jpg");
                try {
                    if(outputImage.exists())
                        outputImage.delete();
                    outputImage.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                imageuri=Uri.fromFile(outputImage);
                Intent intent=new Intent();
                //intent.setAction(Intent.ACTION_PICK);
                intent.setAction(Intent.ACTION_GET_CONTENT); 
                intent.setType("image/*");
                startActivityForResult(intent,CHOOSE_PHOTO);

书上从相册中选择照片剪切完成并显示的相关代码似乎有误,反正我用书上代码,在真机上无法弹出剪切照片的程序的。如果有跟我有同样的问题可以参考我的代码。

播放多媒体

  • 播放音频
    • 构造MediaPlayer对象
    • 调用setDataSource()方法设置音频路径
    • 调用prepare()使MediaPlayer进入准备状态
    • 主要方法:
      start() 开始或继续播放音频
      pause() 暂停播放音频
      reset() 将MediaPlayer对象重置到刚开始创建的状态
      seekTo() 从指定的位置开始播放
      stop() 停止播放音频
      release() 释放掉与MediaPlayer对象相关的资源
      isPlaying() 判断当前MediaPlayer是否正在播放音频
      getDuration() 获取载入的音频文件的时长
  • 播放视频
    • 实例化VideoView对象
    • 调用setVideoPath()指定视频文件的路径
    • 具体方法与MediaPlayer差不多。

你可能感兴趣的:(android,第一行代码,android多媒体,使用通知)