热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android开发实现的Intent跳转工具类实例

这篇文章主要介绍了Android开发实现的Intent跳转工具类,简单描述了Intent组件的功能并结合实例形式给出了页面跳转、拍照、图片调用等相关操作技巧,需要的朋友可以参考下

本文实例讲述了Android开发实现的Intent跳转工具类。分享给大家供大家参考,具体如下:

一、概述

Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。

Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcasts。

二、Intent跳转工具类代码

/**
 * 进行页面跳转的工具
 *
 * @author chen.lin
 *
 */
public class IntentUtil {
  private static final String IMAGE_TYPE = "image/*";
  private static final String TAG = "IntentUtil";
  /**
   * 进行页面跳转
   *
   * @param clzz
   */
  public static void showIntent(Activity context, Class<&#63;> clzz, String[] keys, String[] values) {
    Intent intent = new Intent(context, clzz);
    if (values != null && values.length > 0) {
      for (int i = 0; i  clzz) {
    showIntent(context, clzz, null, null);
  }
  /**
   * 打电话
   *
   * @param intent
   * @param context
   * @param tel
   */
  public static void openCall(Context context, String tel) {
    tel = tel.replaceAll("-", "");
    Intent intent = new Intent();
    // 激活源代码,添加intent对象
    intent.setAction("android.intent.action.CALL");
    intent.setData(Uri.parse("tel:" + tel));
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    context.startActivity(intent);
  }
  /***
   * 从相册中取图片
   */
  public static void pickPhoto(Activity context, int requestCode) {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    context.startActivityForResult(intent, requestCode);
  }
  /**
   * 拍照获取图片
   */
  public static void takePhoto(Activity context, int requestCode, Uri cameraUri) {
    // 执行拍照前,应该先判断SD卡是否存在
    String SDState = Environment.getExternalStorageState();
    if (SDState.equals(Environment.MEDIA_MOUNTED)) {
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"
      Logger.i(TAG, "cameraUri.path------>" + cameraUri.getPath());
      intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, cameraUri);
      context.startActivityForResult(intent, requestCode);
    } else {
      Toast.makeText(context, "内存卡不存在", Toast.LENGTH_LONG).show();
    }
  }
  /**
   * 拍照
   *
   * @param context
   * @param uri
   */
  public static void takePhoto(Activity context, Uri uri, int requestCode) {
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
      Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
      ContentValues values = new ContentValues();
      values.put(MediaStore.Images.Media.DISPLAY_NAME, String.valueOf(System.currentTimeMillis()) + ".jpg");
      values.put(MediaStore.Images.Media.MIME_TYPE, "image/*");
      uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
      // intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
      intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
      context.startActivityForResult(intent, requestCode);
    } else {
      Toast.makeText(context, "内存卡不存在", Toast.LENGTH_LONG).show();
    }
  }
  /**
   * 本地照片调用
   *
   * @param context
   * @param requestCode
   */
  public void openPhotos(Activity context, int requestCode) {
    if (openPhotosNormal(context, requestCode) //
        && openPhotosBrowser(context, requestCode) //
        && openPhotosFinally(context))
      ;
  }
  /**
   * 这个是找不到相关的图片浏览器,或者相册
   */
  private boolean openPhotosFinally(Activity context) {
    Toast.makeText(context, "您的系统没有文件浏览器或则相册支持,请安装!", Toast.LENGTH_LONG).show();
    return false;
  }
  /**
   * 获取从本地图库返回来的时候的URI解析出来的文件路径
   *
   * @return
   */
  public static String getPhotoPathByLocalUri(Context context, Intent data) {
    Uri photoUri = data.getData();
    String[] filePathColumn = { MediaStore.Images.Media.DATA };
    Cursor cursor = context.getContentResolver().query(photoUri, filePathColumn, null, null, null);
    cursor.moveToFirst();
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    cursor.close();
    return picturePath;
  }
  /**
   * PopupMenu打开本地相册.
   */
  private boolean openPhotosNormal(Activity activity, int actResultCode) {
    Intent intent = new Intent(Intent.ACTION_PICK, null);
    intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_TYPE);
    try {
      activity.startActivityForResult(intent, actResultCode);
    } catch (android.content.ActivityNotFoundException e) {
      return true;
    }
    return false;
  }
  /**
   * 打开其他的一文件浏览器,如果没有本地相册的话
   */
  private boolean openPhotosBrowser(Activity activity, int requestCode) {
    Toast.makeText(activity, "没有相册软件,运行文件浏览器", Toast.LENGTH_LONG).show();
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); // "android.intent.action.GET_CONTENT"
    intent.setType(IMAGE_TYPE); // 查看类型 String IMAGE_UNSPECIFIED =
                  // "image/*";
    Intent wrapperIntent = Intent.createChooser(intent, null);
    try {
      activity.startActivityForResult(wrapperIntent, requestCode);
    } catch (android.content.ActivityNotFoundException e1) {
      return true;
    }
    return false;
  }
  /**
   * 打开照相机
   *
   * @param activity
   *      当前的activity
   * @param requestCode
   *      拍照成功时activity forResult 的时候的requestCode
   * @param photoFile
   *      拍照完毕时,图片保存的位置
   */
  @SuppressLint("SimpleDateFormat")
  public static Uri openCamera(Activity context, int requestCode) {
    // 执行拍照前,应该先判断SD卡是否存在
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
      String filename = timeStampFormat.format(new Date());
      ContentValues values = new ContentValues();
      values.put(MediaStore.Images.Media.TITLE, filename);
      Uri photoUri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
      intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
      context.startActivityForResult(intent, requestCode);
      return photoUri;
    } else {
      Toast.makeText(context, "内存卡不存在", Toast.LENGTH_LONG).show();
    }
    return null;
  }
  /**
   * 选择图片后,获取图片的路径
   *
   * @param requestCode
   * @param data
   */
  public static void doPhoto(Activity context, Intent data, int requestCode, int value, EditText editText,
      ImageView imageView, Uri photoUri) {
    // 从相册取图片,有些手机有异常情况,请注意
    if (requestCode == value) {
      if (data == null) {
        Toast.makeText(context, "选择图片文件出错", Toast.LENGTH_LONG).show();
        return;
      }
      photoUri = data.getData();
      if (photoUri == null) {
        Toast.makeText(context, "选择图片文件出错", Toast.LENGTH_LONG).show();
        return;
      }
    }
    String[] pojo = { MediaStore.Images.Media.DATA, MediaStore.Images.Media.DISPLAY_NAME };
    ContentResolver resolver = context.getContentResolver();
    Cursor cursor = resolver.query(photoUri, pojo, null, null, null);
    String picPath = null;
    String filename = null;
    if (cursor != null) {
      int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);
      cursor.moveToFirst();
      picPath = cursor.getString(columnIndex);
      filename = cursor.getString(cursor.getColumnIndexOrThrow(pojo[1]));
      editText.requestFocus();
      editText.setText(filename);
      cursor.close();
    }
    String dix = filename.substring(filename.lastIndexOf("."), filename.length());
    if (filename != null
        && (dix.equalsIgnoreCase(".png") || dix.equalsIgnoreCase(".jpg") || dix.equalsIgnoreCase(".gif")
            || dix.equalsIgnoreCase(".bmp") || dix.equalsIgnoreCase(".jpeg") || dix
              .equalsIgnoreCase(".tiff"))) {
      // lastIntent.putExtra(KEY_PHOTO_PATH, picPath);
      imageView.setVisibility(View.VISIBLE);
      imageView.setImageURI(Uri.parse(picPath));
    } else {
      imageView.setVisibility(View.GONE);
      Toast.makeText(context, "选择图片文件不正确", Toast.LENGTH_LONG).show();
    }
  }
  /**
   * FLAG_ACTIVITY_SINGLE_TOP
   * //当于加载模式中的singletop,在当前中的activity中转到当前activity,不增加新的
   *
   * @param file
   */
  public static void openFile(Context context, File file) {
    Intent intent = new Intent();
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 默认的跳转类型,它会重新创建一个新的Activity
    intent.setAction(android.content.Intent.ACTION_VIEW);
    // 调用getMIMEType()来取得MimeType
    String type = FileUtil.getMIMEType(file);
    // 设置intent的file与MimeType
    intent.setDataAndType(Uri.fromFile(file), type);
    context.startActivity(intent);
  }
  /**
   * 截取图片
   *
   * @param uri
   * @param outputX
   * @param outputY
   * @param requestCode
   */
  public static void cropImage(Activity context, Uri uri, int outputX, int outputY, int requestCode) {
    // 裁剪图片意图
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    intent.putExtra("crop", "true");
    // 裁剪框的比例,1:1
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    // 裁剪后输出图片的尺寸大小
    intent.putExtra("outputX", outputX);
    intent.putExtra("outputY", outputY);
    // 图片格式
    intent.putExtra("outputFormat", "JPEG");
    intent.putExtra("noFaceDetection", true);
    intent.putExtra("return-data", true);
    context.startActivityForResult(intent, requestCode);
  }
  /**
   * 获取图片的旋转角度
   *
   * @param path
   * @return
   */
  public static int readPictureDegree(String path) {
    int degree = 0;
    try {
      ExifInterface exifInterface = new ExifInterface(path);
      int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,
          ExifInterface.ORIENTATION_NORMAL);
      switch (orientation) {
      case ExifInterface.ORIENTATION_ROTATE_90:
        degree = 90;
        break;
      case ExifInterface.ORIENTATION_ROTATE_180:
        degree = 180;
        break;
      case ExifInterface.ORIENTATION_ROTATE_270:
        degree = 270;
        break;
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    return degree;
  }
  /**
   * 保存文件
   *
   * @param context
   * @param data
   * @param requestCode
   * @param imageView
   */
  public static void saveImage(Activity context, Intent data, int requestCode, ImageView imageView) {
    Bitmap photo = null;
    Uri photoUri = data.getData();
    cropImage(context, photoUri, 500, 500, requestCode);
    if (photoUri != null) {
      photo = BitmapFactory.decodeFile(photoUri.getPath());
    }
    if (photo == null) {
      Bundle extra = data.getExtras();
      if (extra != null) {
        photo = (Bitmap) extra.get("data");
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);
      }
    }
    imageView.setImageBitmap(photo);
  }
  /**
   * 保存照相后的图片
   *
   * @param context
   * @param requestCode
   * @param spath
   * @return
   */
  public static boolean saveCamera(Activity context, Intent data, Uri cameraUri, EditText editText,
      ImageView imageView) {
    try {
      final Bundle extras = data.getExtras();
      if (extras != null) {
        Bitmap photo = extras.getParcelable("data");
        imageView.setImageBitmap(photo);
      }
      if (cameraUri != null) {
        String path = cameraUri.getPath();
        Logger.i(TAG, "path-->" + path);
        String filename = path.substring(path.lastIndexOf("/") + 1, path.length());
        editText.setText(filename);
      }
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }
    return true;
  }
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Echarts图表重复加载、axis重复多次请求问题解决记录
    文章目录1.需求描述2.问题描述正常状态:问题状态:3.解决方法1.需求描述使用Echats实现了一个中国地图:通过选择查询周期&#x ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
author-avatar
雨含的晴天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有