依旧是很乱的笔记,主要记录了活动相关的知识。跟随老师的教学、《第一行代码》和 Android 官方示例。

Intent

显式 Intent

可以用来启动活动,主要使用 Intent(Context packageContext, Class<?> cls),第一个参数要求提供上下文,第二个参数是要启动的活动类。

例子

1
2
3
4
5
6
7
8
Button buttonExplicitIntent = (Button) findViewById(R.id.button_explicit_intent);
buttonExplicitIntent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
}
});

当用户点击 button_explicit_intent 时,就会启动 SecondActivity 活动。

隐式 Intent

活动的 actioncategory 需要在 AndroidManifest.xml 中注册,用以匹配 Intent。

当活动的 actioncategory 与 Intent 中指定的匹配时,这个活动就会响应此 Intent。

隐式 Intent 启动活动

1
2
3
4
5
6
7
8
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="xyz.bolitao.activitytest.ACTIONI_START" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="xyz.bolitao.activitytest.MY_CATEGORY" />
</intent-filter>
</activity>
1
2
3
4
5
6
7
8
9
Button buttonImplicitIntent = (Button) findViewById(R.id.button_implicit_intent);
buttonImplicitIntent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("xyz.bolitao.activitytest.ACTIONI_START");
intent.addCategory("xyz.bolitao.activitytest.MY_CATEGORY");
startActivity(intent);
}
});

点击button_implicit_intent 按钮后会启动 SecondActivity。

这里没有指定 android.intent.category.DEFAULT这个category,因为 android.intent.category.DEFAULT` 是一种默认的 category,在调用 startActivity() 方法时会自动将这个 category 添加到 Intent 中。

隐式 Intent 调起浏览器

1
2
3
4
5
6
7
8
9
Button buttonMoreIntentUsage = (Button) findViewById(R.id.button_more_intent_usage);
buttonMoreIntentUsage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://bolitao.xyz"));
startActivity(intent);
}
});

这里 Intent 的参数 Intent.ACTION_VIEW 官方文档解释为:Display the data to the user,会根据之后传入的数据打开相应的活动,是一个很常用的参数。

当点击 button_more_intent_usage 时会使用默认浏览器打开链接 https://bolitao.xyz。

创建一个活动使其能响应打开网页的 Intent

创建活动 ThirdActivity,AndroidManifest.xml 中做以下配置:

1
2
3
4
5
6
7
8
<activity android:name=".ThirdActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
</activity>

点击上个例子中的 button_more_intent_usage 后会提示用户使用哪个应用打开链接: