首页 > 编程知识 正文

intent详解(intent启动组件)

时间:2023-05-04 13:13:08 阅读:76007 作者:1745

Android提供了一种Intent机制,用于帮助您在APP应用程序之间进行交互和通信。 Intent不仅可以用于APP应用程序之间的交互,还可以用于APP应用程序中的活动、服务和broadcast receiver之间的交互。 Intent这个英语单词的本意是“目的、意图”。

Intent是一种运行时绑定机制,在程序运行时连接两个不同的组件。

1、使用startActivity (或startActivityForResult )通过intent启动活动。 setResult (,activity传递了返回结果的intent。

3358 www.Sina.com/(视图视图) {

intent http://www.Sina.com/=get intent (;

//Intentinten=new Intent (;

intent.putextra('message ','这是回复');

设置结果(101,intent );

finish (; //必须销毁

}

2、将intent对象传递给startService )以启动服务,或者向正在运行的服务发送消息。 intent对象(bindService ) )以绑定服务。

3、如果将intent对象传递到广播方法(如sendBroadcast (、sendOrderedBroadcast )或sendStickyBroadcast ) ),则它们将传递到broadcast receiver

包含在intent中的属性:七个属性:组件、操作、类别、日期、类型、附加和标志

Intent负责描述APP应用程序中一个操作的动作、动作相关的数据、附加数据,Android根据该Intent的描述,找到对应的组件,将Intent传递给调用的组件,然后将组件

分为明确的意图和隐含的意图。

一、明确意图:明确指定Intent的目标组件。 通常用于同一APP应用程序之间的跳转。

1 )组件:有意启动的组件

组件名称有三种类型的构造函数。

(1)组件名称(上下文,类) ) ) ) )。

)2)组件名称(上下文,字符串) )。

)3)组件名称(字符串包,字符串clz ) )。

其中表示类名的字符串必须使用整个类名。

jydhb只用于区分安卓APP。

也可以为不同的Android APP应用程序启动活动

intent.setcomponent(component

2 ) intent.setClass ()

3 )新英特尔(上下文,类) ) )。

缺点:无法调用其他APP应用程序的活动。

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

//通过明确意图指定了要跳转的组件

//Intent intent=new Intent (;

//componentnamecomponent=newcomponentname (this、

//MyActivity.class; //

//intent.setclass(this,MyActivity.class; //

//intent.setcomponent () component;

//intentI=newintent(this,MyActivity.class; //

//开始活动(英特尔);

二、隐式意图:未明确指定组件名称的Intent是隐式意图,

Android系统根据隐式意图中设置的操作、类别、数据、URI和数据类型找到最佳的系统

组件来处理这个意图。一般用于不同应用程序之间的跳转。

Android系统使用IntentFilter来寻找与隐式相关的组件。

(1)Action动作

用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在AndroidManifest.xml 的Activity 定义时,可以在其 <intent-filter >节点指定一个 Action列表用于标识 Activity 所能接受的“动作”。

(2)Category

为Action增加额外的附加条件(用来表现动作的类别),一般将action和category结合使用

Intent:只能包含一个Action,可以有多个Category在java代码中有多个action后者会覆盖前者,因此是没意义的

Activity:可以配置多种Action,可以配置多个Category,类别越多,动作越具体,意图越明确

a)每一个通过 startActivity() 方法发出的隐式Intent都至少有一个 category,就是 "android.intent.category.DEFAULT",所以只要是想接收一个隐式Intent的 Activity 都应该包括"android.intent.category.DEFAULT"category,不然将导致 Intent 匹配失败

b)一个<intent-filter>至少应该包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配。若Intent请求的Action和<intent-filter>中的某一个<action>匹配,那么该Intent就通过这条<intent-filter>的动作测试。

c)如<intent-filter>中没有包含任何Action类型,那么无论什么Intent请求都无法和这个<intent-filter>匹配

e)当Intent请求中包含并所有的Category与组件中某个IntentFilter的<category>完全匹配时,才会让该Intent请求通过测试

(3)Data  向Action属性提供操作的数据,Data属性接受一个Uri对象。

URI  通用资源标识符:在网络中或者本地如何找到一个唯一的资源的标识符

URL   统一资源定位符:把一个地址作为唯一的资源的标识符,

URN           统一资源命名符

格式:协议://地址:端口号/资源路径

 

一般情况下Activty可以有多个action,多个category,但是只能有一个data.

并且配置data之前需要先有action.

(4)Type 为Action属性提供操作的数据的数据类型

注意:在java代码中

1)Intent中不能单独设置Type,需要结合Action和Data一起使用

2)默认Data与Type不可以同时使用,后设置的属性会覆盖前设置的属性,可以使用setDataAndType()同时设置两个属性。

 

代码及常用action用法:

/***************************** 隐式意图 ************************************/

 

                  Intentintent = new Intent();

                  //是actvity的动作,配合意图过滤器AndroidManifest.xml

                  //<intent-filter>

                  //<action android:name="banwxf" />//可以有多个

                  //<category android:name="android.intent.category.DEFAULT" />//必须存在

                  //</intent-filter>

 

                  //如果配置了相同action的activity不止一个则会让你选择一个activity(可以设置优先级priority)

//当Intent匹配成功的组件有多个时,显示优先级高的组件,如果优先级相同,显示列表让//用户自己选择,优先级从-1000至1000,并且其中一个必须为负的才有效

 

                  intent.setAction("banwxf");//如果多条则,后者覆盖前者。没有意义

                  intent.addCategory("banwxf");//是action的附加条件,可以有多条该语句,但是只要满足其中的一个就可以

                  //intent只能包含一个action但是可以有多个category,但至少要有一个category

 

                  //<data android:scheme="banwxf"

                  //android:host="127.0.0.1"

                  //android:port="8888"

                  //android:path="/sa"/>

                  //data属性不需要写全,只能有一个data。用之前必须要有action

                  //如何将字符串转换为uri对象

                  Uriuri = Uri.parse("banwxf://127.0.0.1:8888/sa");// 此uri一定需要写全"scheme://host:port:path"

 

                  //intent.setData(uri);

 

                  //intent.setType("***/***");

                  //注意:data和type不能分开设置

                  intent.setDataAndType(uri,"abc/def");

 

                  startActivity(intent);

         }

 

         publicvoid myWeb(View view) {

                  //通过action掉用系统程序

                  Intentintent = new Intent();

                  intent.setAction(Intent.ACTION_VIEW);//ACTION_VIEW是一个引用,显示指定的对象

                  intent.setData(Uri.parse("http://www.baidu.com"));

                  startActivity(intent);

         }

 

         //播放音乐

         publicvoid myMusic(View view) {

                  //通过action掉用系统程序

                  Intentintent = new Intent();

                  intent.setAction(Intent.ACTION_VIEW);//ACTION_VIEW是一个引用,显示指定的对象

                  //intent.setData(Uri.parse("file:///sdcard/muc.mp3"));

                  intent.setDataAndType(Uri.parse("file:///sdcard/muc.mp3"),"audio/mp3");

                  startActivity(intent);

         }

 

         //打电话

         publicvoid call(View view) {

                  //通过action掉用系统程序

                  Intentintent = new Intent();

                  //intent.setAction(Intent.ACTION_CALL);//直接拨号

                  intent.setAction(Intent.ACTION_DIAL);//跳转到拨号界面

                  intent.setData(Uri.parse("tel:10086"));

                  startActivity(intent);

         }

 

         //写在程序

         publicvoid delete(View view) {

                  //通过action掉用系统程序

                  Intentintent = new Intent();

                  intent.setAction(Intent.ACTION_DELETE);//删除程序

                  intent.setData(Uri.parse("package:com.example.mycompont"));//指定要卸载的应用

                  startActivity(intent);

         }


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。