日报2015/10/14(极客学院安卓视频学习)

昨天po主去看琅琊榜了,摸鱼了一整天


隐式 Intent

之前显示启动activityB的时候是通过

startActivity(new Intent(A.this,B.class));

其中,B.class就是显式启动的特点,这种方式智能启动本应用中的其他activity,因为别的应用里的activity的class是找不到的。

这时候就比较适合使用隐式启动了

要启动的是B,那么在B的activity配置里面,通过Intent-Filter来配置

        <activity
            android:name=".B"
            android:label="B">
            <intent-filter>
                <action android:name="aty_B" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

category指定B用什么形式呈现,DEFAULT就是以Activity形式呈现

action就是一串字符串,这里自己写一个简单的aty_B,然后在java代码里面直接

startActivity(new Intent("aty_B"));

就可以启动B了


在Android studio里面,新建一个module,叫app2,然后从app2里面启动app里面的B试试看。

同样在app2的MainActivity中

startActivity(new Intent("aty_B"));

可以启动app1里面的B,这样就实现了跨应用启动activity了。

如果不想被别的应用启动的话,可以如下配置

activity android:exported="false"

Q:不过po主自己测试了以后发现还是能访问,不知道为啥

百度了一下,http://blog.csdn.net/lvxiangan/article/details/46859349
这里说

同时,一定要注意的是, 非公开的Activity不能设置intent-filter,因为,如果假设在同一机器上,有另外一个app有同样的intent-filter的话, 调用该Activity的intent会唤醒android的选择画面, 让你选择使用那个app接受该intent。这样就会事实上绕过了非公开的设置。

但是按照视频中的步骤的话,得不到它那种结果,头疼。


Intent 过滤器相关选项

如果两个activity配置一样的action字符串呢?

例如B、C两个activity

        <activity
            android:name=".B"
            android:label="B">
            <intent-filter>
                <action android:name="com.jackie.courseintent.aty_B" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".C"
            android:label="C">
            <intent-filter>
                <action android:name="com.jackie.courseintent.aty_B" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

这时候再按照之前的方法,在app2的MainActivity中

startActivity(new Intent("com.jackie.courseintent.aty_B"));

这里写图片描述

关于data配置:
给C配置一下

<data android:scheme="C"/>

然后启动:

startActivity(new Intent("com.jackie.courseintent.aty_B",Uri.parse("C://hello")));

此时:
这里写图片描述

不会出现上面的选择B还是C的选项,而是直接跳到了C


如果将Activity的data属性里面,设置scheme为http,那么这个Activity就可以相应http协议的请求

        <activity
            android:name=".LocalAty"
            android:label="@string/title_activity_local_aty">
            <intent-filter>
                <category android:name="android.intent.category.APP_BROWSER" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http"/>
                <action android:name="android.intent.action.VIEW" />
            </intent-filter>
        </activity>
Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

这里写图片描述

而且如果绑定了服务,解绑了以后,服务会直接destroy,此时重新绑定的话,会从create开始新的生命周期,也就是说,在Service的生命周期里面,只有onStart可以被反复执行,其他的行为在一个生命周期里只执行一次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值