Android 显式 Intent
显式 Intent 就是直接指定 全限定类名 或者设定唯一性的 category
、data
、action
的方式启动 Intent
所以,显示 Intent
其实有三种形式,相同点都是具有唯一性,不同是唯一值的属性可以不同
- 全限定类名 (包名+类名)
action
和category
具有唯一性action
和data
具有唯一性category
和data
具有唯一性,不过好像几乎没有唯一性的可能,如果有,那么也是 data 有唯一性
范例
我们用一个 demo 来演示下这两种类别
-
创建一个 空的 Android 项目
cn.twle.android.DirectIntent
-
修改
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>
-
在
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>
-
新建
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); } }
-
然后修改
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); } }); } }
运行结果如下
action
和 category
具有唯一性
比如主界面只有一个,action
和 category
两个属性分别为 INTENT.ACTION_MAIN
和 INTENT.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); } }); } }
运行结果如下
action
和 data
具有唯一性
假设我们手机上只有一个浏览器,那么 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); } }); } }
运行结果如下