zoukankan      html  css  js  c++  java
  • 安卓intent

    一.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.  
    3. import android.app.Activity;  
    4. import android.content.Intent;  
    5. import android.os.Bundle;  
    6. import android.view.View;  
    7. import android.view.View.OnClickListener;  
    8. import android.widget.Button;  
    9.  
    10. public class MainActivity extends Activity {  
    11.     private Button getBtn;  
    12.     @Override 
    13.     public void onCreate(Bundle savedInstanceState) {  
    14.         super.onCreate(savedInstanceState);  
    15.         setContentView(R.layout.main);  
    16.           
    17.         getBtn=(Button)findViewById(R.id.getBtn);  
    18.         getBtn.setOnClickListener(new OnClickListener() {  
    19.             @Override 
    20.             public void onClick(View v) {     
    21.                 Intent intent = new Intent();                 
    22.                 intent.setAction(Intent.ACTION_GET_CONTENT);// 设置Intent Action属性                  
    23.                 intent.setType("vnd.android.cursor.item/phone");// 设置Intent Type 属性   
    24.                                                                 //主要是获取通讯录的内容  
    25.                 startActivity(intent); // 启动Activity  
    26.             }  
    27.         });          
    28.     }  

    效果图:

     

     

    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.  
    3. import android.app.Activity;  
    4. import android.content.Intent;  
    5. import android.os.Bundle;  
    6. import android.view.View;  
    7. import android.view.View.OnClickListener;  
    8. import android.widget.Button;  
    9.  
    10. public class MainActivity extends Activity {  
    11.     private Button btn;  
    12.     @Override 
    13.     public void onCreate(Bundle savedInstanceState) {  
    14.         super.onCreate(savedInstanceState);  
    15.         setContentView(R.layout.main);  
    16.           
    17.         btn = (Button)findViewById(R.id.Button1);  
    18.         btn.setOnClickListener(new OnClickListener() {  
    19.             @Override 
    20.             public void onClick(View v) {     
    21.                 Intent intent = new Intent();                 
    22.                 intent.setAction(Intent.ACTION_MAIN);// 添加Action属性                
    23.                 intent.addCategory(Intent.CATEGORY_HOME);// 添加Category属性              
    24.                 startActivity(intent);// 启动Activity  
    25.             }  
    26.         });  
    27.     }  

    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.  
    3. import android.app.Activity;  
    4. import android.content.Intent;  
    5. import android.os.Bundle;  
    6. import android.view.View;  
    7. import android.view.View.OnClickListener;  
    8. import android.widget.Button;  
    9. import android.widget.EditText;  
    10.  
    11. public class FirstActivity extends Activity {  
    12.     private Button btn;  
    13.     private EditText etx;  
    14.       
    15.     @Override  
    16.     public void onCreate(Bundle savedInstanceState) {  
    17.         super.onCreate(savedInstanceState);  
    18.         setContentView(R.layout.first);  
    19.           
    20.         btn = (Button)findViewById(R.id.Button1);  
    21.         etx = (EditText)findViewById(R.id.EditText1);  
    22.           
    23.         btn.setOnClickListener(new OnClickListener() {  
    24.             @Override  
    25.             public void onClick(View v) {  
    26.                 Intent intent = new Intent();  
    27.                 //设置Intent的class属性,跳转到SecondActivity  
    28.                 intent.setClass(FirstActivity.this, SecondActivity.class);  
    29.                 //为intent添加额外的信息  
    30.                 intent.putExtra("useName", etx.getText().toString());  
    31.                 //启动Activity  
    32.                 startActivity(intent);  
    33.             }  
    34.         });         
    35.     }  

    SecondActivity.java

    1. package com.android.extras.activity;  
    2.  
    3. import android.app.Activity;  
    4. import android.content.Intent;  
    5. import android.os.Bundle;  
    6. import android.widget.TextView;  
    7.  
    8. public class SecondActivity extends Activity {  
    9.     private TextView tv;  
    10.       
    11.     @Override 
    12.     public void onCreate(Bundle savedInstanceState) {  
    13.         super.onCreate(savedInstanceState);  
    14.         //设置当前的Activity的界面布局  
    15.         setContentView(R.layout.second);  
    16.         //获得Intent  
    17.         Intent intent = this.getIntent();         
    18.         tv = (TextView)findViewById(R.id.TextView1);  
    19.         //从Intent获得额外信息,设置为TextView的文本  
    20.         tv.setText(intent.getStringExtra("useName"));  
    21.     }  

    注意:在添加第二个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.  
    8.     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    9.         <activity android:name=".FirstActivity" 
    10.                   android:label="@string/app_name"> 
    11.             <intent-filter> 
    12.                 <action android:name="android.intent.action.MAIN" /> 
    13.                 <category android:name="android.intent.category.LAUNCHER" /> 
    14.             </intent-filter> 
    15.         </activity> 
    16.         <activity android:name=".SecondActivity" 
    17.                   android:label="@string/app_name"> 
    18.         </activity> 
    19.     </application> 
    20. </manifest> 

    效果图:

  • 相关阅读:
    HDU 5528 Count a * b 欧拉函数
    HDU 5534 Partial Tree 完全背包
    HDU 5536 Chip Factory Trie
    HDU 5510 Bazinga KMP
    HDU 4821 String 字符串哈希
    HDU 4814 Golden Radio Base 模拟
    LA 6538 Dinner Coming Soon DP
    HDU 4781 Assignment For Princess 构造
    LA 7056 Colorful Toy Polya定理
    LA 6540 Fibonacci Tree
  • 原文地址:https://www.cnblogs.com/huangxiaoying/p/5845567.html
Copyright © 2011-2022 走看看