关于《第一行代码》添加data后报错,无响应式intent操作的解决办法

一.问题的出现

        当我们跟着书上的代码一步一步敲着走的时候,渐渐发现,书上并没有明显表示对于添加完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似乎有点想法

http://t.csdnimg.cn/vkdBv

因为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);

 《第一行代码》这本书看着还是很爽的,一边看书一边跟着敲,运行的效果也不赖.不过也不能因此丢掉了思考,在遇到新的问题时用已有知识反复推敲,才能不断夯实基础,同时也能打磨自己敲代码的思维逻辑

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值