讲作业
先把昨天卖的关子给说了,怎么才能按返回键实现网页后退。我们需要做一个返回键拦截,然后手动控制网页后退。请看代码:
public boolean onKeyDown(int keyCode, KeyEvent event) { //支持网页后退
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
我们首先重写了 onKeyDown 方法,在这个方法体里做一下判断,如果按的是返回键同时网页可以后退就调用 webview 的 goBack 方法。不会的同学就直接复制我的这个吧,我当时就是。随着技术的增长积累,就明白了。
隐式 Intent
有的时候我们并不是明确的要启动某一个活动,比如我要打开系统浏览器,我也不可能把每一个浏览器的活动都写一遍。这时就需要用到隐式 Intent 了。隐式 Intent 是和系统描述我们要做什么,然后系统就会打开对应可以处理的程序。比如说我告诉系统我要打开一个网页,系统就会自动调用浏览器来执行。
使用 action 限定隐式 Intent:
一个活动要想能被别的活动调用,首先被调用的Activity在AndroidManifest.xml文件中要有一个带有<intent-filter>并且包含<action>的Activity,并且设定它能处理的Intent。将category设为"android.intent.category.DEFAULT"。action的name是一个字符串,可以自定义,例如我在这里设成"webview":
<activity android:name=".webview_activity">
<intent-filter>
<action android:name="webview"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
然后,在MainActivity,才可以通过这个action name找到上面的Activity。下面两种方式分别通过setAction和构造方法方法设置Action,两种方式效果相同:
1、setAction方法
Intent intent = new Intent();
intent.setAction("webview");
startActivity(intent);
2、构造方法直接设置Action
Intent intent = new Intent("webview");
startActivity(intent);
通过设置Action字符串,表明自己的意图,即我想干嘛,需要由系统解析,找到能够处理这个 Intent 的 Activity 并启动。比如我想打电话,则可以设置Action为"android.intent.action.DIAL"字符串,表示打电话的意图,系统会找到能处理这个意图的Activity,例如调出拨号面板。 不过需要注意的是:这个Activity其他应用程序也可以调用,只要使用这个Action字符串。这样应用程序之间交互就很容易了,例如手机QQ可以调用QQ空间,可以调用腾讯微博等。 因为如此,为了防止应用程序之间互相影响,一般命名方式是包名+Action名,例如这里命名"webview"就很不合理了,就应该改成"com.intent.test.webview"。
再回过头去看看 AndroidManifest.xml 你会发现不光有 action 还有个 category 。这么说吧,要 Action 和 category 同时匹配上才行。因为「android.intent.category.DEFAULT」是一个默认的 category 所以就不用写了。
总结
为啥这一节这么匆忙,因为,,,,这东西了解就好,到用的时候再回来看一下就好了。
一共二十二讲,我觉得你应该也算是入门了吧,你已经具备了自己探索的能力了。
第一季是时候说再见了,我会利用一段的时间闭关去提升自己的能力,以更好的姿态面对大家。不过不用伤心,大家敬请期待第二期:『烽哥带你彪程序』
2020/5/24 注:
这是我 2018 年高中毕业的假期写的,当时并没有自己搭建博客,近期我给这一系列的文章都放到我自己的博客上。
当时写这个系列文章的想法就是扎实下基础,然后能帮到更多的人就更好了,但是大学开学之后就开始了新生活,没有大块的时间去编撰,系列文章也没有再更新过。但是我其实并不想放弃这个系列,那就,有缘再见吧,拜拜ヾ(•ω•`)o