关于多个App漂亮的跳转Activity-权限

前言

android中一个app的activity如何拉起另外一个app的activity,其中涉及到权限相关知识!

假如我们要拉起chenxi项目中TestActivity.java这个窗口,看一下AndroidManifest.xml中如何配置

首先定义一个权限:

<permission

    android:name="com.sunst.android.permission.CHENXI"

android:protectionLevel="dangerous">

</permission>

注册TestActivity并设置必要属性:

<activity

android:name=".TestActivity"

android:exported="true"

android:permission="com.sunst.android.permission.CHENXI">

<intent-filter>

<action android:name="com.sunst.android.permission.CHENXI"/>

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

</intent-filter>

</activity>

对,很简单,以上就算是完成了Chenxi app中的配置

备注:配置action在跳转时可以intent.setaction方式跳转

现在我们在Xiaotuanzi项目中来拉起Chenxi中TestActivity窗口

首先布局文件中定义一个按钮,注册相应点击事件,可以通过如下三种方法拉起TestActivity窗口

/** action方式验证ok-晴雨qy*/

Intent intent = new Intent();

intent.setAction("com.sunst.android.permission.CHENXI");

intent.addCategory("android.intent.category.DEFAULT");

startActivity(intent);

/**setClassName方式验证ok-晴雨qy*/

Intent intent = new Intent();

intent.setClassName("com.chenxi", "com.chenxi.TestActivity");

intent.addCategory("android.intent.category.DEFAULT");

startActivity(intent);

/**ComponetName方式验证ok-晴雨qy*/

Intent intent = new Intent();

ComponentName componentName = new ComponentName("com.chenxi", "com.chenxi.TestActivity");

intent.setComponent(componentName);

intent.addCategory("android.intent.category.DEFAULT");

startActivity(intent);

当然不要忘记在Xiaotuanzi中AndroidManifest注册相应的权限,如:

<uses-permission android:name="com.sunst.android.permission.CHENXI"/>

备注:

这里需要说明一下Intent的setClass和setClassName的区别

setClass:同application中的activity或者service跳转

setClassName:不同Applicaiton的activity或者service跳转

以上方法保证百分百有效。

再说一下权限

<permission android:description="string resource" 

            android:icon="drawable resource" 

            android:label="string resource" 

            android:name="string" 

            android:permissionGroup="string" 

            android:protectionLevel=["normal" | "dangerous" | 

                                    "signature" | "signatureOrSystem"] /> 

android:description :对权限的描述,一般是两句话,第一句话描述这个权限所针对的操作,第二句话告诉用户授予app这个权限会带来的后果

android:label: 对权限的一个简短描述

android:name :权限的唯一标识,一般都是使用 报名加权限名

android:permissionGroup: 权限所属权限组的名称

android:protectionLevel: 权限的等级:

normal 是最低的等级,声明次权限的app,系统会默认授予次权限,不会提示用户 

dangerous 权限对应的操作有安全风险,系统在安装声明此类权限的app时会提示用户 

signature 权限表明的操作只针对使用同一个证书签名的app开放 

signatureOrSystem 与signature类似,只是增加了rom中自带的app的声明

android:name 属性是必须的,其他的可选,未写的系统会指定默认值

URL Scheme方式

通过URL Scheme拉起activity常见于我们的第三方应用(如H5,其它app)。

(1)android通过url scheme打开activity,只需要在manifest 中配置以下几个参数即可

同样的我们还是准备拉起ChenXi项目中TestActivity

<activity

android:name=".TestActivity"

android:exported="true"

android:permission="com.sunst.android.permission.CHENXI">

<intent-filter>

<action android:name="com.sunst.android.permission.CHENXI"/>

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

</intent-filter>

<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:host="com.xixi"

android:path="/xipath"

android:scheme="chenscheme"/>

</intent-filter>

</activity>

Tips:实际上<data>中还有其他参数,真没有时间补充,你们可以自己研究以下

这样通过链接chenscheme://com.xixi/xipath就可以打开此activity了;复杂些,比如向activity中传递一些真实数据信息 chenscheme://com.xixi/xipath?means=truelove

(2)拉起TestActivity

从html网页中,使用url链接启动TestActivity,比如像支付宝里面拉起芝麻信用,就是这种方式

<a href="chenscheme://com.xixi/xipath?means=truelove">start Xi</a>

当然如果是在本地中拉起,同样简单:

/**

*                <data

*                    android:host="com.xixi"

*                    android:path="/xipath"

*                    android:scheme="chenscheme"/>

*

* */

Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse("chenscheme://com.xixi/xipath?"));

//        Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse("schemexixi://hostxixi:8080/pathxixi?means=truelove&time=forever"));

intent.addCategory("android.intent.category.DEFAULT");

intent.addCategory("android.intent.category.BROWSABLE");

startActivity(intent);

参数URI的格式,对应于配置文件中的值即可

Uri.parse("schemexixi://hostxixi:8080/pathxixi?means=truelove&time=forever")

(3)参数解析

Intent intent = getIntent();

String action = intent.getAction();

if(Intent.ACTION_VIEW.equals(action)){

  Uri uri = intent.getData();

  if(uri != null){

      String means = uri.getQueryParameter("means"); // means=truelove

      String time = uri.getQueryParameter("time"); // time=forever

  }

}

以上便是跳转Activity-权限全部内容,

附《Android核心知识笔记2020》分享

前段时间我和圈子里的几位架构师朋友一起闲聊时的突发奇想,我们在学习Android开发的时候或多或少也受到了一些前辈的指导,所以想把这份情怀延续下去。三个月后,这套资料就出来了,需要这份资料的朋友加Android学习交流群1049273031即可获取。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件...
    牧童遥指2000阅读 5,032评论 0 12
  • //gradle 下载慢 //可以直接下载gradle之后放在对应的目录里//或者修改 根目录下的文件bul...
    zeromemcpy阅读 876评论 0 0
  • Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要。 一、什么是Intent...
    困惑困惑困惑阅读 1,482评论 0 0
  • 2.1 Activity 2.1.1 Activity的生命周期全面分析 典型情况下的生命周期:在用户参与的情况下...
    AndroidMaster阅读 3,002评论 0 8
  • 本文内容 intent是什么? Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Int...
    TensorFlow开发者阅读 552评论 0 1