关于多个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-权限全部内容,

附:插件化框架设计和 Activity启动流程知识

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

资料领取:加群4112676,验证:资料  即可免费获得

    原文作者:Android架构_
    原文地址: https://www.jianshu.com/p/77b8b5620191
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞