android启动activity的几种方式

来源:互联网 发布:软件开发职业发展方向 编辑:程序博客网 时间:2024/05/02 05:06

跳转activity的几种方式,主要是通过intent意图,分为显示和隐式intent

1.显示跳转

A.class跳转

用例:

?
1
2
3
Intent it = new Intent(A.this,B.class);
//it.putExtra("key","value"); //跳转时传的参数
startActivity(it);

使用场景:应用内部跳转,频率较高


B.包名、类名跳转

用例:

?
1
2
3
4
Intent it= new Intent();
it.setClassName("cn.thear","cn.thear.MainActivity");//包名和类名
//it.putExtra("key","value"); //传一些参数
startActivity(it);


使用场景:内部跳转+外部跳转。


C.ComponentName跳转

用例:

?
1
2
3
4
Intent it= new Intent();
it.setComponent(newComponentName(<span></span>"cn.thear","cn.thear.MainActivity"));//包名和类名
//it.putExtra("key","value"); //传一些参数
startActivity(it);

使用场景:内部跳转+外部跳转。

注:在外部跳转时,当要跳转第三应用时,只知道包名和类名,就推荐用B或C跳转了。但这个不是特别灵活,比如在要跳转的activity前有个过渡初始化页面时,那直接跳过去肯定会出问题的啦。


2.隐式跳转

?
1
2
3
Intent it = new Intent("com.custom.skip.action");//参数要跳转的activity中定义的action名,这个action是在androidManifest.sml中定义
//it.putExtra("key","value"); //跳转时传的参数
startActivity(it);

使用场景:内部跳转+外部跳转。推荐非第三应用的外部跳转,这样方便约定此action跳转


3.跳转时遇到的问题

####在外部跳转(尤其是第三方应用跳转系统应用)时,相信大家肯定遇到了个权限问题######

?
1
10-2112:08:13.183: E/AndroidRuntime(25061): java.lang.SecurityException: Permission Denial: starting Intent { cmp=cn.thear/cn.thear.MainActivity} from ProcessRecord{4221292025061:com.example.outappopenactivity/u0a10026} (pid=25061, uid=10026) not exported from uid 1000

这个是因为2个应用不在同一个用户组里,是跨进程跳转。需要在AndroidManifest.xml中要跳转的activity中加入一个属性android:exported="true",允许外部跳转,此时能够跳转成功。
但是,这个属性的介绍是这样的:

http://developer.android.com/guide/topics/manifest/activity-element.html#exported

当这个值为“false”时,只能在同一个应用或者有相同的user id(比如跳转系统应用,则要添加system uid,并签名)的应用里被启动。
当为“true,不管什么组件,都能启动这个activity

这个属性的默认值依赖于这个activity是否声明了intent-filter,如果没有,则为false;否则为默认为true.

0 0
原创粉丝点击