Flutter和Android中的Intent
Intent 是一个消息传递对象,使用它可以向其他Android组件请求操作,其基本用途如:启动 Activity、启动服务、传递广播等。
Flutter中虽然没有Intent的概念,但可以通过 Flutter的intent插件 来集成Intent的功能,其页面跳转等的实现也与Android的intent类似。
最常见的就是点击按钮跳转页面的事件,下文中的Intent也可以添加在点击事件中查看效果,创建点击事件可以看这里。
一、Android
(一)Activity
1、显式Intent
(1)最简单常用的方式
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
(2)setComponent()方法
//第一个参数是被打开APP的包名,第二个参数是SecondActivity这个页面所在的全路径、也可以理解为包名+activity名
ComponentName cName = new ComponentName("com.example.test", "com.example.test.SecondActivity");
Intent intent = new Intent();
intent.setComponent(cName);
//上述代码也可以是intent.setComponent(new ComponentName("com.example.test","com.example.test.SecondActivity"));
startActivity(intent);
(3)setClass()/setClassName()方法
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
//或者intent.setClassName(this, "com.example.app.SecondActivity");
//或者intent.setClassName(this.getPackageName(),"com.example.app.SecondActivity");
startActivity(intent);
2、隐式Intent
隐式Intent,即不明确指定启动哪个Activity,而是通过设置action、category、data等抽象信息,让系统来找出合适的Activity。
(1)先在AndroidManifest.xml中找到你想要调用的Activity(被Intent调用的),然后添加或修改类似下列<intent-filter>的内容:
<activity
android:name="com.example.app.SecondActivity">
<intent-filter>
<action android:name="Second"/> //为了防止应用程序之间互相影响,一般的标准命名方式是包名+Action名,例如这里就应该改成"com.example.test.SecondActivity"。
<category android:name="android.intent.category.DEFAULT"/> //至少必须要有这个category才能响应
</intent-filter>
</activity>
(2)Intent创建
Intent intent = new Intent();
intent.setAction("Second");
startActivity(intent);
(3)每个Intent只能指定一个action,但却可以指定多个category,需要在上述(1)(2)的AndroidManifest.xml和Intent中修改如下:
<activity
android:name="com.example.app.SecondActivity">
<intent-filter>
<action android:name="Second"/>
<category android:name="android.intent.category.DEFAULT"/>