前言
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,验证:资料 即可免费获得
网友评论