首页 > 其他分享 >Intent的简介以及属性的详解

Intent的简介以及属性的详解

时间:2023-03-28 10:03:22浏览次数:35  
标签:简介 详解 Intent Activity import android 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. <?xmlversion="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. <?xmlversion="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
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.     }  
29. }


效果图:

Intent的简介以及属性的详解_android

Intent的简介以及属性的详解_xml_02

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. <?xmlversion="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. <?xmlversion="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
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.     }  
28. }


 效果图:

Intent的简介以及属性的详解_android_03

Intent的简介以及属性的详解_xml_04

 

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. <?xmlversion="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. <?xmlversion="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. <?xmlversion="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.     }  
36. }


SecondActivity.java


    1. package
    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.     }  
    22. }


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


    1. <?xmlversion="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>


    效果图:

    Intent的简介以及属性的详解_android_05

    Intent的简介以及属性的详解_android_06

    标签:简介,详解,Intent,Activity,import,android,intent,属性
    From: https://blog.51cto.com/u_14523369/6153825

    相关文章

    • Java泛型详解
      注:本文转自:https://blog.csdn.net/qq_41701956/article/details/123473592泛型在java中有很重要的地位,无论是开源框架还是JDK源码都能看到它。毫不夸张的说,泛型是通用设......
    • Linux进程编程实例详解
      我们都知道Linux是一个多任务的系统,它可以支持高并发执行任务。可以通过pstree命令查看树状的进程图。代码1#include<stdio.h>#include<unistd.h>//这个包里面有g......
    • Unity之PBR两种工作流简介
      关于PBR工作流,看下unity内置shader的设定:  可以看到有2种工作流,Specular和Metallic。它们的区别如下:  也就是前者用了一张SpecularMap,后者用的是MetallicMap。......
    • Intent传递数据大小的限制
      (286条消息)Intent传递数据大小的限制_intent传输最大数据限制是什么_yzpyzp的博客-CSDN博客(286条消息)Intent传输数据大小限制-Android-CSDN博客......
    • Linux 简介
      Linux简介Linux内核最初只是由芬兰人林纳斯·托瓦兹(LinusTorvalds)在赫尔辛基大学上学时出于个人爱好而编写的。Linux是一套免费使用和自由传播的类Unix操作系统,是......
    • SHA-256 简介及 C# 和 js 实现【加密知多少系列】
      〇、简介SHA-256是SHA-2下细分出的一种算法。截止目前(2023-03)未出现“碰撞”案例,被视为是绝对安全的加密算法之一。SHA-2(安全散列算法2:SecureHashAlgorithm2)是一......
    • WordPress 数据库操作WPDB对象($wpdb)用法详解
       使用wordpress的时候,如果想直接使用WP里封装的数据库操作的类(wp-db.php),将wp-blog-header.php包含到代码中就可以使用了。define(‘PATH’,dirname(dirname(__FILE__......
    • 小皮Windows web面板漏洞详解
      漏洞简介PhpStudy国内12年老牌公益软件,集安全、高效、功能与一体,已获得全球用户认可安装,运维也高效。支持一键LAMP、LNMP、集群、监控、网站、数据库、FTP、软件中心......
    • C#中抽象方法与虚方法的区别详解及示例
      1.抽象方法与虚方法的区别  先说两者最大的区别:抽象方法是需要子类去实现的。虚方法是已经实现了的,可以被子类覆盖,也可以不覆盖,取决于需求。因为抽象类无法实例化,所以......
    • C#中重写(override)及覆盖(new)的区别详解
      1.重写和覆盖的定义1.1重写(override)的定义  在C#中,用override关键字来重写一个父类中的虚方法或抽象方法。override关键字用于指示编译器,我要用派生类中的一个方法......