一.问题的出现
当我们跟着书上的代码一步一步敲着走的时候,渐渐发现,书上并没有明显表示对于添加完data后的解决办法.
无论是这样写
<data android:scheme="https"/>
还是这样写,都会报错.
<data
android:scheme="https"
android:host="cn.bing.com"/>
于是我到网上查了一下,大多都只是给出使其不报错的解决办法,并没有选择响应intent程序的界面
<category android:name="android.intent.category.BROWSABLE"/>
二.梳理思路
当我看见我代码里的category.BROWSABLE时,想到,按理来说,FirstActivity跳转时应该会匹配ThirdActivity里的内容才对,但是他并没有.于是我转到FirstActivity使用intent的地方查看,发现intent在声明时是Intent.VIEW
Intent intent = new Intent(Intent.ACTION_VIEW);
这时我突然想到了什么,转去看书上的隐式Intent的创建
没错,引号里边是action里name的内容!于是我将书上ThirdAvtivity的action的内容改了过去.
当引号前面出现action时,我感觉问题已经解决了.
intent-filter里则是
运行!
成功跳出响应intent程序界面!
三.新的发现
当我改完new Intent里的action之后,突然想到,这会不会和category有关呢?于是我搜索Android的category,看见了夜雨Gecer的文章,对category似乎有点想法
因为ACTION没有BROWSABLE,我就把new的intent改为DEFAULT
而intent-filter里只多加了一个category的DEFAULT
发现ThirdActivity页面仍然可以出现响应intent程序的界面
四.总结
就目前来说,我找到了两种产生响应intent界面的办法,但大体来讲算是一种:
ThirdAvtivity默认的DEFAULT可以不管,就自行添加一个BROWSABLE来解决添加了data之后报错的问题
<activity
android:name=".ThirdActivity"
android:exported="true">
<intent-filter >
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:scheme="https"
android:host="cn.bing.com"/>
</intent-filter>
</activity>
主要看Intent这边怎么使用,可以Intent.ACTION_DEFAULT,也可以带入action的name
Intent intent = new Intent(Intent.ACTION_DEFAULT);
startActivity(intent);
Intent intent = new Intent("android.intent.action.VIEW");
startActivity(intent);
《第一行代码》这本书看着还是很爽的,一边看书一边跟着敲,运行的效果也不赖.不过也不能因此丢掉了思考,在遇到新的问题时用已有知识反复推敲,才能不断夯实基础,同时也能打磨自己敲代码的思维逻辑