本系列文章,参考《第一行代码》,作为个人笔记
相对于显示 Intent ,隐式 Intent 比较含蓄。这种方式不明确指出我们想要启动哪一个 Activity。而是定义了一系列更为抽象的 action
和 category
等信息。然后交给系统去分析这个 Intent ,并帮我们找出这个合适Activity。
合适的 Activity 就是指的可以响应这个隐式 Intent 的 Activity。
通过在 <activity>
标签下配置 <intent-filter>
的内容,可以指定当前 Activity 能够响应的 action 和 category。在 AndroidManifest.xml
中添加:
<activity android:name = ".SecondActivity">
<intent-filter>
<action android:name ="com.syd.start"/>
<category android:name ="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
在 <action>
标签中我们指明了当前 Activity 可以响应 com.example.activitytest.ACTION_START
这个 action。<category>
标签包含了一些附加信息,更加精确的指明了当前 Activity 能够响应的 Intent 中还可能带有的category
只是可能带有,如果 Intent 中带有 category
则要启动的 Activity 的注册中必须有这个 category
才可以。如果 Intent 中没有带有 category
也是可以的。不过 Activity 在声明的时候只要声明了 action
就要带一个 <category android:name = "android.intent.category.DEFAULT"
否则使用 action 启动的时候会报错,这是因为用 startActivity()
方法的时候会自动将这个 category
添加到 Intent 中去。
在 MainActivity
中将显示启动该为隐式启动
bt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Toast.makeText(MainActivity.this,"显示内容",Toast.LENGTH_SHORT).show();
Intent intent = new Intent("com.syd.start");
startActivity(intent);
}
});
这里使用了 Intent
的另外一个构造函数直接将 action
的字符传了过去,表明我们想要启动的 Activity 需要能够响应 com.syd.start
这个 Action。前面我们已经在 AndroidManifest.xml
中表明了 SecondActivity
可以响应这种 Action 了。
这个时候重新运行程序,点击按钮,就可以使用隐式 Intent 来启动 SecondActivity
了。
每个 Intent 中只能指定一个 action,但是可以指定多个 category
本文分享自 Android开发者家园 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!