Android 显式 Intent

显式 Intent 就是直接指定 全限定类名 或者设定唯一性的 categorydataaction 的方式启动 Intent

所以,显示 Intent 其实有三种形式,相同点都是具有唯一性,不同是唯一值的属性可以不同

  1. 全限定类名 (包名+类名)
  2. actioncategory 具有唯一性
  3. actiondata 具有唯一性
  4. categorydata 具有唯一性,不过好像几乎没有唯一性的可能,如果有,那么也是 data 有唯一性

范例

我们用一个 demo 来演示下这两种类别

  1. 创建一个 空的 Android 项目 cn.twle.android.DirectIntent

  2. 修改 activity_main.xml 添加一个 <Button>

    <?xml version="1.0" encoding="utf-8" ?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/btn_start"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="启动另一个 Activity" />
    </LinearLayout>
    
  3. res/layout 新建一个布局 activity_second.xml ,很简单,就一个 <TextView>

    <?xml version="1.0" encoding="utf-8" ?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="我是第二个 Activity" />
    </LinearLayout>
    
  4. 新建 SecondActivity,在 MainActivity.java 新建文件 SecondActivity.java

    package cn.twle.android.directintent;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    
    public class SecondActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
        }
    }
    
  5. 然后修改 AndroidManifest.xml 添加 SecondActivity

    <activity android:name=".SecondActivity"></activity>
    

全限定类名

全限定类名就是初始化的时候直接传递 Activity 的类

Intent it = new Intent(MainActivity.this, SecondActivity.class);
startActivity(it);

修改 MainActivity.java

package cn.twle.android.directintent;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

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 btn_start = findViewById(R.id.btn_start);
        btn_start.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                // 全限定类名
                Intent it = new Intent(MainActivity.this, SecondActivity.class);

                startActivity(it);

            }

        });
    }
}

运行结果如下


actioncategory 具有唯一性

比如主界面只有一个,actioncategory 两个属性分别为 INTENT.ACTION_MAININTENT.CATEGORY_HOME

Intent it = new Intent();
it.setAction(Intent.ACTION_MAIN);
it.addCategory(Intent.CATEGORY_HOME);
startActivity(it);

修改 MainActivity.java

package cn.twle.android.directintent;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

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 btn_start = findViewById(R.id.btn_start);
        btn_start.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                // action 和 category 合在一起具有唯一性
                Intent it = new Intent();
                it.setAction(Intent.ACTION_MAIN);
                it.addCategory(Intent.CATEGORY_HOME);
                startActivity(it);

            }

        });
    }
}

运行结果如下


actiondata 具有唯一性

假设我们手机上只有一个浏览器,那么 data 设定为 url 也具有唯一性

Intent it = new Intent();
it.setAction(Intent.ACTION_VIEW);
it.setData(Uri.parse("https://www.baidu.com"));
startActivity(it);

修改 MainActivity.java

package cn.twle.android.directintent;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.net.Uri;
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 btn_start = findViewById(R.id.btn_start);
        btn_start.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                // action 和 category 合在一起具有唯一性
                Intent it = new Intent();
                it.setAction(Intent.ACTION_VIEW);
                it.setData(Uri.parse("https://www.twle.cn"));
                startActivity(it);

            }

        });
    }
}

运行结果如下


参考文档

  1. Android Intent 官方 API

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.