美文网首页Android开发Android开发Android开发经验谈
关于多个App漂亮的跳转Activity-权限

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

作者: Android小调 | 来源:发表于2019-04-18 14:33 被阅读15次

    前言

    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启动流程知识

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

    相关文章

      网友评论

        本文标题:关于多个App漂亮的跳转Activity-权限

        本文链接:https://www.haomeiwen.com/subject/gpfswqtx.html