前言
Intent 的中文翻译就是“意图”的意思,它是 Android 程序中传输数据的核心对象。在 Android 官方文档中,对 Intent 的定义是执行某操作的一个抽象描述。 一个 Intent 对象实质上是一组被捆绑的信息,它可以是对 Intent 有兴趣的组件信息(如要执行的动作和要作用的数据),也可以是 Android 系统感兴趣的信息(如处理 Intent 组件的分类信息和如何启动目标活动的指令等)。Intent 对象主要包含 Component name、Action、Category、Data、Extras、Flags 6种属性。
属性 | 作用 |
---|
Component name | 指定为处理 Intent 对象的组件名称 | Action | Intent 要完成的一个动作 | Category | 用来对执行动作的类别进行描述 | Data | 向 Action 提供要操作的数据 | Extras | 向 Intent 组件添加附加信息 | Flags | 指示 Android 程序如何去启动一个 Activity |
Component name
Component name 属性用来设置 Intent 对象的组件名称,它的属性值是一个 ComponentName 对象,要创建一个 ComponentName 需要指定包名和类名——这就可以唯一的确定一个组件类,这样应用程序就可以根据给定的组件类去启动特定的组件。
Action(动作)
Action 属性用来指定将要执行的动作。它很大程度上决定了 Intent 如何构建. Action 与 Data、Extras 属性。它们的关系就像一个方法名决定了参数和返回值一样,正是由于这个原因,所以应该尽可能明确指明动作,并紧紧关联到其他 Intent 字段。
Data(数据)
Data 属性通常用于向 Action 提供要操作的数据。它可以是一个 URI 对象,通常情况下包含数据的 URI 和 MIME 类型,不同的 Action 有不同的数据规格,其采用 “数据类型:数据” 的格式。
Action 与 Data 的数据关联
操作类型 | Data 格式 |
---|
浏览网页 | http://网页地址 | 拨打电话 | tel:电话号码 | 发送短信 | smsto:短信接收号码 | 查找 SD 卡文件 | file:///sdcard/目录或文件 | 显示地图 | geo:坐标,坐标 | 联系人信息 | content://联系人信息 |
举例说明:Intent实现拨打电话、发送短信
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
ImageButton imageButton1 = (ImageButton) findViewById(R.id.phone);
ImageButton imageButton2 = (ImageButton) findViewById(R.id.yx);
imageButton1.setOnClickListener(listener);
imageButton2.setOnClickListener(listener);
}
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
ImageButton imageButton = (ImageButton) v;
switch (imageButton.getId()) {
case R.id.phone:
intent.setAction(intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:12345678"));
startActivity(intent);
break;
case R.id.yx:
intent.setAction(intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:123123123"));
intent.putExtra("sms_body", "hello!");
startActivity(intent);
}
}
};
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.example71">
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Example">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="#999999"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="网址:http://www.~.com\n企业邮箱:123123123@qq.com\n服务电话:123123123"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="100dp"
android:layout_marginLeft="10dp"
android:textSize="25dp"
android:textColor="#FFFFFF"
android:id="@+id/text"/>
<ImageButton
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginTop="20dp"
android:id="@+id/phone"
android:layout_below="@+id/text"
android:layout_marginLeft="20dp"
android:background="@drawable/phone"
/>
<ImageButton
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginTop="20dp"
android:id="@+id/yx"
android:layout_below="@+id/text"
android:layout_toRightOf="@+id/phone"
android:layout_marginLeft="20dp"
android:background="@drawable/yx"
/>
</RelativeLayout>
|