android开发基础5-intent(明日科技教程)

初识intent

在这里插入图片描述
Intent充当传递数据的信使

Intent负责对应用当中的一次动作,动作涉及的数据,附加数据,动作作用的对象进行描述。
Andriod负责找到Intent作用对象的组件,并将Intent中的数据传递给作用的组件进行调用。

Intent的基本应用

  • 开启一个Activity
  • 开启一个Service
  • 传递广播

Intent对象的属性

在这里插入图片描述

Component name属性

设置Intent对象的组件名称,通过给定的包名和Activity名称,启动特定的组件

Intent intent1 = new Intent();
intent1.setComponent(new ComponentName("com.package.name","com.package.name.activitynew"));
startActivity(intent1);

Action和Data属性

action相当于一个动作
A: 我想要喝
B: ??? 喝啥,水、饮料,动作不明确

action再加上Data
A: 我想要喝水
B: 目的明确,处理喝水

Action属性

android中的Action常量
ACTION_VIEW : 向用户展示数据
ACTION_CALL : 给某人打电话
ACTION_SENDTO : 给某人发短信

Data属性

data属性是一个uri对象,不同的ACTION对象,data属性的uri也不同
ACTION_EDIT : data中的uri : content://com.android.contaces/contacts/1
ACTION_CALL : tel:10086
ACTION_VIEW : http://**** 等等

实例:实现拨打电话和发送短信的功能

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.mingrisoft.MainActivity">

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="技术支持:吉林省明日科技有限公司"
        android:layout_marginTop="20dp"/>

    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="网址:http://www.mingrisoft.com"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/text1"/>
    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="企业邮箱:mingrisoft@mingrisoft.com"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/text2"/>
    <TextView
        android:id="@+id/text4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="技术服务热线:0431-84978981"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/text3"/>
    <ImageButton
        android:id="@+id/imageButton_phone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/phone"
        android:layout_below="@+id/text4"
        android:layout_marginTop="30dp"
        android:background="#0000"
        android:scaleType="fitXY"
        />
    <ImageButton
        android:id="@+id/imageButton_sms"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/imageButton_phone"
        android:layout_below="@+id/text4"
        android:layout_marginTop="30dp"
        android:layout_marginLeft="30dp"
        android:background="#0000"
        android:scaleType="fitXY"
        android:src="@drawable/sms"/>
</RelativeLayout>
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageButton imageButton = (ImageButton) findViewById(R.id.imageButton_phone); //获取电话图片按钮
        ImageButton imageButton1 = (ImageButton) findViewById(R.id.imageButton_sms); //获取短信图片按钮
        imageButton.setOnClickListener(l); //为电话图片按钮设置单击事件
        imageButton1.setOnClickListener(l);//为短信图片按钮设置单击事件
    }

    //创建监听事件对象
    View.OnClickListener l = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(); //创建Intent对象
            switch (v.getId()) {       //根据ImageButton组件的id进行判断
                case R.id.imageButton_phone:              //如果是电话图片按钮
                    intent.setAction(intent.ACTION_DIAL); //调用拨号面板
                    intent.setData(Uri.parse("tel:13800138000")); //设置要拨打的号码
                    startActivity(intent); //启动Activity
                    break;
                case R.id.imageButton_sms:             //如果是短信图片按钮
                    intent.setAction(intent.ACTION_SENDTO); //调用发送短信息
                    intent.setData(Uri.parse("smsto:5554")); //设置要发送的号码
                    intent.putExtra("sms_body", "Welcome to Android!"); //设置要发送的信息内容
                    startActivity(intent); //启动Activity
            }
        }


    };
}

需要配置打电话和发送短信的权限

    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>

Action和Category属性

可以配合使用,启动其他组件

Category属性

对执行动作的类别进行描述,通过android提供的Category常量进行设置
CATEGORY_DEFAULT : 把指定的activity作为执行数据的默认动作
CATEGORY_LAUNCHER : 把指定的activty作为应用的入口
CATEGORY_HOME : 返回系统桌面

实例:返回到系统桌面

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //设置全屏显示
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        ImageButton imageButton= (ImageButton) findViewById(R.id.imageButton1); //获取ImageView组件
        //为ImageView组件设置单击事件监听器
        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();  //创建Intent对象
                intent.setAction(intent.ACTION_MAIN);  //设置action动作属性
                intent.addCategory(intent.CATEGORY_HOME); //设置categoty种类显示主屏幕
                startActivity(intent); //启动Activity
            }
        });
    }
}

Extras和Flags属性

Extras向intent中添加数据
Bundle的添加,存取: putExtras()、getExtras()

Falgs属性

android程序如何启动其他的activity

DetailActivity不在历史栈中保留,用于一旦厉害这个activity,就自动关闭activity

Intent intent = new Intent(MainActivity.this,DetailActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);

Intent种类

显示Intent
多用于在应用程序内部传递信息
指定目标组件的名称

//1 
Intent intent = new Intent(context, Class<?> cls);
// 2
Intent intent1 = new Intent();
intent1.setComponent(new ComponentName("com.package.name","com.package.name.activitynew"));

隐式Intent
多用于在不同应用程序之间传递信息
不指定具体的目标组件,通过指定action、category、data
让android系统根据设置好的匹配规则,找到要启动的activity

Intent过滤器

在调用另一个acitivty组件,但是没有直接指定要打开activity组件的名称
而是为这个activity组件设置一个过滤器,在过滤器中设置可匹配的规则,规则匹配上了,则打开该activity组件

设置过滤器

在AndroidManifest.xml文件中通过intent-filter标签设置过滤器

<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="com.mingrisoft"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".ContactsActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

package com.mingrisoft;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button= (Button) findViewById(R.id.btn); //获取按钮组件
        //为按钮创建单击事件
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(); //创建Intent对象
                intent.setAction(intent.ACTION_VIEW); //为Intent设置动作
                startActivity(intent); //启动Activity
            }
        });

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值