>>分享Android开发相关的技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 21577 个阅读者 刷新本主题
 * 贴子主题:  Android开发学习笔记:Intent的简介以及属性的详解-IT的点点滴滴 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-01-07 03:38:05     消息  查看  搜索  好友  邮件  复制  引用

  一.Intent的介绍

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

        二.Inten启动组件的方法

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

                    
               组件名称 <o:p></o:p>                               方法名称 <o:p></o:p>                
               <o:p> </o:p>

                  Activity<o:p></o:p>                
               startActvity( )<o:p></o:p>

                  startActivity( )<o:p></o:p>                
               <o:p> </o:p>

                  Service<o:p></o:p>                
               startService( )<o:p></o:p>

                  bindService( )<o:p></o:p>                
               <o:p> </o:p>

                  Broadcasts<o:p></o:p>                
               sendBroadcasts( )<o:p></o:p>

                  sendOrderedBroadcasts( )<o:p></o:p>

                  sendStickyBroadcasts( )<o:p></o:p>                


                三.Intent的属性

        Intent有以下几个属性:

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

         1.Intent的Action属性

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

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


                 下面是一个测试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.           getBtn=(Button)findViewById(R.id.getBtn);  
  15.           getBtn.setOnClickListener( new  OnClickListener() {  
  16.                @Override  
  17.                public   void  onClick(View v) {    
  18.                   Intent intent =  new  Intent();                
  19.                   intent.setAction(Intent.ACTION_GET_CONTENT); // 设置Intent Action属性                  
  20.                   intent.setType( "vnd.android.cursor.item/phone" ); // 设置Intent Type 属性    
  21.                                                                    //主要是获取通讯录的内容  
  22.                   startActivity(intent);  // 启动Activity  
  23.               }  
  24.           });          
  25.       }  
  26.   }
     效果图:

        [url=s1.51cto.com/attachment/201108/232215811.jpg]点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小[/url][url=s1.51cto.com/attachment/201108/232235711.jpg]点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小[/url]

         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<o:p></o:p>                               Meaning<o:p></o:p>                
               CATEGORY_BROWSABLE <o:p></o:p>                               The target activity can be safely invoked by the browser to display data referenced by a link — for example, an p_w_picpath or an e-mail message.<o:p></o:p>                
               CATEGORY_GADGET <o:p></o:p>                               The activity can be embedded inside of another activity that hosts gadgets.<o:p></o:p>                
               CATEGORY_HOME <o:p></o:p>                               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.<o:p></o:p>                
               CATEGORY_LAUNCHER <o:p></o:p>                               The activity can be the initial activity of a task and is listed in the top-level application launcher.<o:p></o:p>                
               CATEGORY_PREFERENCE <o:p></o:p>                               The target activity is a preference panel.<o:p></o:p>                


                 下面是一个回到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.           btn = (Button)findViewById(R.id.Button1);  
  15.           btn.setOnClickListener( new  OnClickListener() {  
  16.                @Override  
  17.                public   void  onClick(View v) {    
  18.                   Intent intent =  new  Intent();                
  19.                   intent.setAction(Intent.ACTION_MAIN); // 添加Action属性                
  20.                   intent.addCategory(Intent.CATEGORY_HOME); // 添加Category属性              
  21.                   startActivity(intent); // 启动Activity  
  22.               }  
  23.           });  
  24.       }  
  25.   }
      效果图:

        [url=s1.51cto.com/attachment/201108/230955675.jpg]点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小[/url][url=s1.51cto.com/attachment/201108/231025114.jpg]点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小[/url]

                         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.       @Override  
  13.       public void onCreate(Bundle savedInstanceState) {  
  14.           super.onCreate(savedInstanceState);  
  15.           setContentView(R.layout.first);  
  16.            btn  = (Button)findViewById(R.id.Button1);  
  17.            etx  = (EditText)findViewById(R.id.EditText1);  
  18.           btn.setOnClickListener(new OnClickListener() {  
  19.               @Override  
  20.               public void onClick(View v) {  
  21.                   Intent  intent  =  new  Intent();  
  22.                   //设置Intent的class属性,跳转到SecondActivity  
  23.                   intent.setClass(FirstActivity.this, SecondActivity.class);  
  24.                   //为intent添加额外的信息  
  25.                   intent.putExtra("useName", etx.getText().toString());  
  26.                   //启动Activity  
  27.                   startActivity(intent);  
  28.               }  
  29.           });        
  30.       }  
  31.   }
     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.        @Override  
  9.        public   void  onCreate(Bundle savedInstanceState) {  
  10.            super .onCreate(savedInstanceState);  
  11.            //设置当前的Activity的界面布局  
  12.           setContentView(R.layout.second);  
  13.            //获得Intent  
  14.           Intent intent =  this .getIntent();        
  15.           tv = (TextView)findViewById(R.id.TextView1);  
  16.            //从Intent获得额外信息,设置为TextView的文本  
  17.           tv.setText(intent.getStringExtra( "useName" ));  
  18.       }  
  19.   }
     注意:在添加第二个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 >  
     效果图:

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小



----------------------------
原文链接:https://blog.51cto.com/liangruijun/634411



[这个贴子最后由 flybird 在 2020-01-07 20:14:13 重新编辑]
网站系统异常


系统异常信息
Request URL: http://www.javathinker.net/WEB-INF/lybbs/jsp/topic.jsp?postID=1271

java.lang.NullPointerException

如果你不知道错误发生的原因,请把上面完整的信息提交给本站管理人员