改完包名,手机同时装两个app,出现数据混乱问题

根据公司需求,需要出几个不同的版本,修改包名,然后可以把多个app同事安装在一个手机上。

结果问题出现了,用了一段时间后,就会出现一个app上拿到了另个app里配置的数据,数据位于私有数据库中或共享参数文件里。

一开始觉得百思不得其解,毕竟这种私有的东西只能在自己包名下获取,然后开始进行逐一排查。

首先,基于上面的假设,先导出混乱的数据库文件,进行查看,结果发现数据库中真的插入了不属于本app的数据。当时真是震惊了我。感觉好神奇又怪异。

下一步,开始找数据的来源及插入原因,终于被我找到了,是清单文件里注册的静态广播的问题,由于广播名相同,当接收到服务器的数据更新,需要发广播去更新数据库或共享参数文件,由于广播名称相同,就会导致两个app都接收到数据。

问题找到后就该解决问题了。

第一种方法,可以在自己应用发广播时添加参数声明Receiver所需的权限。

首先,在Androidmanifest.xml中定义新的权限RECV_XXX,例如:

<permission android:name = "com.android.permission.RECV_XXX"/> 

然后,在Sender app发送广播时将此权限作为参数传入,如下:

sendBroadcast("com.android.XXX_ACTION""com.android.permission.RECV_XXX");  

这样做之后就使得只有具有RECV_XXX权限的Receiver才能接收此广播要接收该广播,在Receiver应用的AndroidManifest.xml中要添加对应的RECV_XXX权限。

例如:

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

第二种方法,需要在Receiver app的<receiver> tag中声明一下Sender app应该具有的权限。

首先同上,在AndroidManifest.xml中定义新的权限SEND_XXX,例如:

<permission android:name="com.android.SEND_XXX"/>  

然后,在Receiver app的Androidmanifest.xml中的<receiver>tag里添加权限SEND_XXX的声明,如下:

<receiver android:name=".XXXReceiver"     android:permission="com.android.permission.SEND_XXX">   

    <intent-filter> 

       <action android:name="com.android.XXX_ACTION" />   

    </intent-filter>  

</receiver> 

这样一来,该Receiver便只能接收来自具有该SEND_XXX权限的应用发出的广播。

要发送这种广播,需要在Sender app的AndroidManifest.xml中也声明使用该权限即可,如下

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

第三种方法:可以通过修改receiver的action的属性

让每个app的名称都以自己的包名开头。就会使只收到属于自己内部的通知了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值