美文网首页
详解Intent

详解Intent

作者: leap_ | 来源:发表于2019-05-20 13:02 被阅读0次

    什么是intent

    Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互。

    intent的属性

    • component(组件):目的组件
    • action(动作):用来表现意图的行动首先介绍下系统动作的取值:
      • ACTION_MAIN :App启动时的入口
      • ACTION_VIEW :显示数据给用户,比如使用浏览器打开网址,用图片应用显示图片等
      • ACTION_EDIT :显示可编辑的数据
      • ACTION_CALL :拨号
      • ACTION_DIAL :打电话,显示带拨号盘的页面,让用户可以进行拨号动作。
      • ACTION_SEND:发短信,比如电子邮件应用或者一些社交应用
      • ACTION_ANSWER :接电话
      • ACTION_SEARCH :导航栏的search操作
        action是模糊匹配,因此需要更加详细的信息才行,需要加入category和data,
    • category(类别):用来表现动作的类别,常见的系统category:
      • CATEGORY_BROWSABLE:目标 Activity 允许本身通过网络浏览器启动,以显示链接引用的数据,如图像或电子邮件。
      • CATEGORY_LAUNCHER:该 Activity 是任务的初始 Activity,在系统的应用启动器中列出。
    • data(数据):(即uri)表示与动作要操纵的数据,Data 内容一般由 action 决定,比如 action 为 ACTION_VIEW,那么 Data 就可以是一个网址,也可以是图片之类的数据 uri。
    • type(数据类型):对于data范例的描写,但是要注意同时设置时应该使用 setDataAndType()方法,防止互相抵消。同时指定 Uri 和 MIME 类型有助于 Android 系统找到接收 Intent 的最佳组件,例如可以响应 ACTION_VIEW 的组件可能有非常多,浏览器、播放器、图片应用等等。此时设置mimeType为"image/jpeg"或者video/mp4,则系统可以筛选出更合适的响应组件。

    以下两种(Extra、Flag)属于附加的信息,不影响系统解析启动那个组件

    • extras(扩展信息):扩展信息
    • Flags(标志位):期望这个意图的运行模式(activity的启动模式)
    intent类型分为两个类型,显式和隐式,component为显示类型,其余均为隐式类型。

    显式使用(component的用法)

     startActivity(Intent(this@SplashActivity,LoginActivity::class.java))
    

    隐式使用

    下面是调用系统拨号程序的例子:

     Intent intent = new Intent();
     intent.setAction(Intent.ACTION_CALL);
     Uri uri = Uri.parse("tel:"+"15960238696");
     intent.setData(uri);
     startActivity(intent);
    

    安装apk的例子:

            val intent = Intent(Intent.ACTION_VIEW)
            intent.action = Intent.ACTION_VIEW
            intent.addCategory(Intent.CATEGORY_DEFAULT)
            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
            intent.setDataAndType(
                    Uri.fromFile(File(path)),
                    "application/vnd.android.package-archive"
            )
            startActivity(intent)
            // 结束当前进程
            Process.killProcess(Process.myPid())
    

    application/vnd.android.package-archive其实是类型为apk文件类型

    相关文章

      网友评论

          本文标题:详解Intent

          本文链接:https://www.haomeiwen.com/subject/zrehzqtx.html