守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 1917|回复: 0

[Android] Android开发学习笔记:Intent的简介以及属性的详解

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    52691
    钢镚
    1422

    开源英雄守望者

    发表于 2016-1-21 09:55:07 | 显示全部楼层 |阅读模式

    一.Intent的介绍

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

    二.Inten启动组件的方法

    Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcasts。具体方法如下:


    组件名称
    方法名称
    Activity
    startActvity( )
    startActivity( )
    Service
    startService( )
    bindService( )
    Broadcasts
    sendBroadcasts( )
    sendOrderedBroadcasts( )
    sendStickyBroadcasts( )

    三.Intent的属性

    Intent有以下几个属性:

    动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。其中最常用的是Action属性和Data属性。

    1.Intent的Action属性

    Action是指Intent要完成的动作,是一个字符串常量。SDK中定义了一些标准的Action常量如下表所示。


    Constant
    Target component
    Action
    ACTION_CALL
    activity
    Initiate a phone call.
    ACTION_EDIT
    activity
    Display data for the user to edit.
    ACTION_MAIN
    activity
    Start up as the initial activity of a task, with no data input and no returned output.
    ACTION_SYNC
    activity
    Synchronize data on a server with data on the mobile device.
    ACTION_BATTERY_LOW
    broadcast receiver
    A warning that the battery is low.
    ACTION_HEADSET_PLUG
    broadcast receiver
    A headset has been plugged into the device, or unplugged from it.
    ACTION_SCREEN_ON
    broadcast receiver
    The screen has been turned on.
    ACTION_TIMEZONE_CHANGED
    broadcast receiver
    The setting for the time zone has changed.

    下面是一个测试Action常量的例子:

    main.xml


    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3.     android:orientation="vertical"
    4.     android:layout_width="fill_parent"
    5.     android:layout_height="fill_parent"
    6.     >
    7.     <TextView   
    8.         android:layout_width="fill_parent"   
    9.         android:layout_height="wrap_content"   
    10.         android:text="@string/hello"
    11.         />
    12.     <Button   
    13.         android:text="测试Action属性"
    14.         android:id="@+id/getBtn"
    15.         android:layout_width="wrap_content"   
    16.         android:layout_height="wrap_content"   
    17.         />
    18. </LinearLayout>
    复制代码

    strings.xml

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <resources>
    3.     <string name="hello">测试Action属性</string>
    4.     <string name="app_name">IntentActionDemo</string>
    5. </resources>
    复制代码

    MainActivity.java

    1. package com.android.action.activity;  

    2. import android.app.Activity;  
    3. import android.content.Intent;  
    4. import android.os.Bundle;  
    5. import android.view.View;  
    6. import android.view.View.OnClickListener;  
    7. import android.widget.Button;  

    8. public class MainActivity extends Activity {  
    9.     private Button getBtn;  
    10.     @Override
    11.     public void onCreate(Bundle savedInstanceState) {  
    12.         super.onCreate(savedInstanceState);  
    13.         setContentView(R.layout.main);  
    14.          
    15.         getBtn=(Button)findViewById(R.id.getBtn);  
    16.         getBtn.setOnClickListener(new OnClickListener() {  
    17.             @Override
    18.             public void onClick(View v) {     
    19.                 Intent intent = new Intent();                 
    20.                 intent.setAction(Intent.ACTION_GET_CONTENT);// 设置Intent Action属性                  
    21.                 intent.setType("vnd.android.cursor.item/phone");// 设置Intent Type 属性   
    22.                                                                 //主要是获取通讯录的内容  
    23.                 startActivity(intent); // 启动Activity  
    24.             }  
    25.         });         
    26.     }  
    27. }
    复制代码

    效果图:



    2.Intent的Data属性

    Intent的Data属性是执行动作的URI和MIME类型,不同的Action有不同的Data数据指定。比如:ACTION_EDIT Action应该和要编辑的文档URI Data匹配,ACTION_VIEW应用应该和要显示的URI匹配。

    3.Intent的Category属性

    Intent中的Category属性是一个执行动作Action的附加信息。比如:CATEGORY_HOME则表示放回到Home界面,ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个。下表是SDK文档中关于Category的信息。


    Constant
    Meaning
    CATEGORY_BROWSABLE
    The target activity can be safely invoked by the browser to display data referenced by a link — for example, an image or an e-mail message.
    CATEGORY_GADGET
    The activity can be embedded inside of another activity that hosts gadgets.
    CATEGORY_HOME
    The activity displays the home screen, the first screen the user sees when the device is turned on or when the HOME key is pressed.
    CATEGORY_LAUNCHER
    The activity can be the initial activity of a task and is listed in the top-level application launcher.
    CATEGORY_PREFERENCE
    The target activity is a preference panel.

    下面是一个回到Home界面的例子:

    main.xml

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3.     android:orientation="vertical" android:layout_width="fill_parent"
    4.     android:layout_height="fill_parent"
    5.     >     
    6.     <TextView   
    7.     android:layout_width="fill_parent"
    8.     android:layout_height="wrap_content"   
    9.     android:text="测试Intent Category"   
    10.     />
    11.     <Button   
    12.     android:id="@+id/Button1"   
    13.     android:layout_width="wrap_content"
    14.     android:layout_height="wrap_content"   
    15.     android:text="转到Home界面"
    16.     />   
    17. </LinearLayout>
    复制代码

    strings.xml

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <resources>
    3.     <string name="hello">Hello World, MainActivity!</string>
    4.     <string name="app_name">IntentCategoryDemo</string>
    5. </resources>
    复制代码

    MainActivity.java

    1. package com.android.category.activity;  

    2. import android.app.Activity;  
    3. import android.content.Intent;  
    4. import android.os.Bundle;  
    5. import android.view.View;  
    6. import android.view.View.OnClickListener;  
    7. import android.widget.Button;  

    8. public class MainActivity extends Activity {  
    9.     private Button btn;  
    10.     @Override
    11.     public void onCreate(Bundle savedInstanceState) {  
    12.         super.onCreate(savedInstanceState);  
    13.         setContentView(R.layout.main);  
    14.          
    15.         btn = (Button)findViewById(R.id.Button1);  
    16.         btn.setOnClickListener(new OnClickListener() {  
    17.             @Override
    18.             public void onClick(View v) {     
    19.                 Intent intent = new Intent();                 
    20.                 intent.setAction(Intent.ACTION_MAIN);// 添加Action属性               
    21.                 intent.addCategory(Intent.CATEGORY_HOME);// 添加Category属性              
    22.                 startActivity(intent);// 启动Activity  
    23.             }  
    24.         });  
    25.     }  
    26. }
    复制代码

    效果图:



    4.Intent的Type属性

    Intent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。

    5.Intent的Compent属性

    Intent的Compent属性指定Intent的的目标组件的类名称。通常 Android会根据Intent 中包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是,如果 component这个属性有指定的话,将直接使用它指定的组件,而不再执行上述查找过程。指定了这个属性以后,Intent的其它所有属性都是可选的。

    6.Intent的Extra属性

    Intent的Extra属性是添加一些组件的附加信息。比如,如果我们要通过一个Activity来发送一个Email,就可以通过Extra属性来添加subject和body。

    下面的例子在第一个Activity的EditText输入用户名,该年龄保存在Intent的Extras属性中。当单击Button时,会在第二个Activity中显示用户名。

    first.xml

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3.     android:orientation="vertical"   
    4.     android:layout_width="fill_parent"
    5.     android:layout_height="fill_parent"
    6.     >     
    7.     <TextView     
    8.         android:layout_width="wrap_content"
    9.         android:layout_height="wrap_content"   
    10.         android:text="请输入用户名"   
    11.         />        
    12.     <EditText   
    13.         android:id="@+id/EditText1"   
    14.         android:layout_width="fill_parent"
    15.         android:layout_height="wrap_content"
    16.         />        
    17.     <Button   
    18.         android:id="@+id/Button1"   
    19.         android:layout_width="wrap_content"
    20.         android:layout_height="wrap_content"   
    21.         android:text="测试Extras属性"
    22.         />        
    23. </LinearLayout>
    复制代码

    second.xml

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3.     android:orientation="vertical"   
    4.     android:layout_width="fill_parent"
    5.     android:layout_height="fill_parent"
    6.     >         
    7.     <TextView   
    8.         android:id="@+id/TextView1"   
    9.         android:layout_width="wrap_content"   
    10.         android:layout_height="wrap_content"
    11.         />
    12. </LinearLayout>
    复制代码

    strings.xml

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <resources>
    3.     <string name="hello">Hello World, FirstActivity!</string>
    4.     <string name="app_name">IntentExtrasDemo</string>
    5. </resources>
    复制代码

    FirstActivity.java

    1. package com.android.extras.activity;  

    2. import android.app.Activity;  
    3. import android.content.Intent;  
    4. import android.os.Bundle;  
    5. import android.view.View;  
    6. import android.view.View.OnClickListener;  
    7. import android.widget.Button;  
    8. import android.widget.EditText;  

    9. public class FirstActivity extends Activity {  
    10.     private Button btn;  
    11.     private EditText etx;  
    12.       
    13.     @Override  
    14.     public void onCreate(Bundle savedInstanceState) {  
    15.         super.onCreate(savedInstanceState);  
    16.         setContentView(R.layout.first);  
    17.          
    18.         btn = (Button)findViewById(R.id.Button1);  
    19.         etx = (EditText)findViewById(R.id.EditText1);  
    20.          
    21.         btn.setOnClickListener(new OnClickListener() {  
    22.             @Override  
    23.             public void onClick(View v) {  
    24.                 Intent intent = new Intent();  
    25.                 //设置Intent的class属性,跳转到SecondActivity  
    26.                 intent.setClass(FirstActivity.this, SecondActivity.class);  
    27.                 //为intent添加额外的信息  
    28.                 intent.putExtra("useName", etx.getText().toString());  
    29.                 //启动Activity  
    30.                 startActivity(intent);  
    31.             }  
    32.         });         
    33.     }  
    34. }
    复制代码

    SecondActivity.java

    1. package com.android.extras.activity;  

    2. import android.app.Activity;  
    3. import android.content.Intent;  
    4. import android.os.Bundle;  
    5. import android.widget.TextView;  

    6. public class SecondActivity extends Activity {  
    7.     private TextView tv;  
    8.       
    9.     @Override
    10.     public void onCreate(Bundle savedInstanceState) {  
    11.         super.onCreate(savedInstanceState);  
    12.         //设置当前的Activity的界面布局  
    13.         setContentView(R.layout.second);  
    14.         //获得Intent  
    15.         Intent intent = this.getIntent();         
    16.         tv = (TextView)findViewById(R.id.TextView1);  
    17.         //从Intent获得额外信息,设置为TextView的文本  
    18.         tv.setText(intent.getStringExtra("useName"));  
    19.     }  
    20. }
    复制代码

    注意:在添加第二个Activity SecondActivity的时候,要在AndroidManifest.xml里面添加上SecondActivity,具体如下,即是在15行</activity>的后面添加上16~18行的代码。如果不这样做,就会在模拟器上出现错误。


    1. <?xml version="1.0" encoding="utf-8"?>
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    3.       package="com.android.extras.activity"
    4.       android:versionCode="1"
    5.       android:versionName="1.0">
    6.     <uses-sdk android:minSdkVersion="10" />

    7.     <application android:icon="@drawable/icon" android:label="@string/app_name">
    8.         <activity android:name=".FirstActivity"
    9.                   android:label="@string/app_name">
    10.             <intent-filter>
    11.                 <action android:name="android.intent.action.MAIN" />
    12.                 <category android:name="android.intent.category.LAUNCHER" />
    13.             </intent-filter>
    14.         </activity>
    15.         <activity android:name=".SecondActivity"
    16.                   android:label="@string/app_name">
    17.         </activity>
    18.     </application>
    19. </manifest>
    复制代码

    效果图:





    本文来自:http://liangruijun.blog.51cto.com/3061169/634411/


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2024-4-19 03:55 , Processed in 0.052567 second(s), 36 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表