Android--Intent启动活动

本文承接Android Studio–使用Toast

一、概述

Intent可以进行各组件之间的交互,不仅可以指明当前组件想要执行的操作,还可以在不同的组件之间传递数据。Intent一般可被用于启动活动、启动服务、以及发送广播等场景,本文主要关注启动活动。

Intent使用分为显式Intent和隐式Intent。我们首先创建一个SecondActivity活动
1.创建布局activity_second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:hint="Write something ..."
        android:layout_margin="3dp"
        android:background="@drawable/textbg"
        android:layout_width="fill_parent"
        android:alpha="20"
        android:singleLine="false"
        android:layout_height="300sp" />
</LinearLayout>

2.新建活动SecondActivity

package com.example.firstapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Window;


public class SecondActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_second);
    }
}

3.在AndroidManifest文件中进行活动的注册,由于不是主活动,所以注册十分简单

        <activity android:name=".SecondActivity">

        </activity>

二、显式Intent的使用

Intent构造函数重载之一Intent(Context packageContext,Class < ? >cls)。第一个参数Context是提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动,通过这个构造函数可以构建出Intent的“意图”。
在主活动中button2按钮点击时启动活动,代码如下:

        Button bt2 = (Button) findViewById(R.id.button2);
        bt2.setOnClickListener(new View.OnClickListener(){
            @Override
            public  void onClick(View v){
                Intent intent=new Intent(MainActivity.this,SecondActivity.class);//构造Intent对象
                startActivity(intent);//启动活动
            }
        });

效果如下:
这里写图片描述

三、隐式Intent

Intent隐式使用指定了一系列更加抽象的action和category等信息,然后由系统去分析这个Intent,并且帮主我们找出合适的活动去启动。
在AndroidManifest文件中进行SecondActivity的活动配置

<activity android:name=".SecondActivity">
   <intent-filter>
      <action android:name="android.intent.action.ACTION_START"/>
      <category android:name="android.intent.category.DEFAULT"/>
   </intent-filter>
</activity>

< action >这个标签中我们指明了当前活动能够相应com.example.firstapp.ACTION_START这个action,而< category >标签则包含了一些附加的信息,更精确的指明了当前的活动能够响应的Intent还可能带有的category。只有< action >和< category >内容同时匹配Intent中的action和category时,这个活动才能响应该Intent。

我们这里不对button2进行修改,而是给button3添加点击事件。

        Button bt3=(Button)findViewById(R.id.button3);
        bt3.setOnClickListener(new View.OnClickListener(){
            @Override
        public  void onClick(View v){
                Intent intent =new Intent("com.example.firstapp.ACTION_START");
                startActivity(intent);
            }
        });

这里使用的是Intent的另一个构造函数,直接将action的字符串传了进去,表明我们想要启动的是能够响应com.example.firstapp.ACTION_START这个action的活动,而category使用的是默认的category

每个Intent只允许一个action,但是允许有多个category,所以我们可以采用addCategory()方法为Intent添加category。代码如下:

Button bt3=(Button)findViewById(R.id.button3);
bt3.setOnClickListener(new View.OnClickListener(){
   @Override
   public  void onClick(View v){
      Intent intent =new Intent("android.intent.action.ACTION_START");                intent.addCategory("com.example.firstapp.MY_CATE");
      startActivity(intent);
   }
});

修改后没有活动能够响应该Intent,我们需要对SecondActivity进行修改,使其可以响应该Intent,修改如下:

<activity android:name=".SecondActivity">
   <intent-filter>
      <action android:name="android.intent.action.ACTION_START"/>
      <category android:name="android.intent.category.DEFAULT"/>
      <category android:name="com.example.firstapp.MY_CATE"/>
   </intent-filter>
</activity>

效果如下:这里写图片描述

三、更多隐式Intent的使用

这里添加button4按钮,方便操作。

        Button bt4=(Button)findViewById(R.id.button4);
        bt4.setOnClickListener(new View.OnClickListener(){
            @Override
            public  void onClick(View v){
                Intent intent =new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("https://www.so.com"));
                startActivity(intent);
            }
        });

使用setData()方法接受一个Uri对象,用于指定当前Intent正在操作的数据,这些数据通常都是以字符串的形式传入Uri.parse()方法中解析产生的。这里调用系统浏览器打开网站。
效果如下:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值