android 应用程序数据共享总结--Moon

来源:未知 责任编辑:智问网络 发表时间:2013-11-04 19:48 点击:

android 应用程序数据共享总结--Moon

1. Share Preference. 

2. Content Provider 

3. Shared User id 
通过Shared User id,拥有同一个User id的多个应用程序可以配置成运行在同一个进程中。所以默认就是可以互相访问任意数据。 也可以配置成运行成不同的进程, 同时可以访问其他应用程序的数据目录下的数据库和文件.就像访问本程序的数据一样.比如某个公司开发了多个Android 程序, 那么可以把数据,图片等资源集中放到应用程序 A中去. 然后这个公司的所有app都使用同一个User ID, 那么所有的资源都可以从APP A中读取。 
举个例子: 
APP A 和APP B 都是C公司的产品,那么如果用户从APP A中登陆成功.那么打开APP B的时候就不用再次登陆. 具体实现就是 A和B设置成同一个User ID: 
* 在2个APPS的AndroidManifest.xml 配置share User ID: 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.android.demo.a1" 
android:sharedUserId="com.c"> 
这个"com.c" 就是share user id, "com.android.demo.a1"是APP A的packagename,而 APP B可是"com.android.demo.b1" 这个没有限制。这个设定好之后, APP B就可以像打开本地数据库那样 打开APP A中的数据库了.APP A把登陆信息存放在A的数据目录下面. APP B每次启动的时候读取APP A下面的数据库。 
另外,我们还开在程序中通过得到APP A的上下文之后,才能打开数据库: 
APP B中的代码: 
mContext = this.createPackageContext("com.android.demo.a1", 
Context.CONTEXT_IGNORE_SECURITY); 
通过A的package name 就可以得到A的 package context,然后通过这个context就可以直接打开数据库。

4.权限
实现这样的功能:两个应用程序A和B,B要有相应的权限才能访问A中的某个Activity。
首先看A的实现
先在A的Activity里加一个TextView,写些内容方便等下检验。下面设置manifest.xml,增加一个自定义的权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="giuz.blog1"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name="<u style="outline-style: none; outline-width: initial; outline-color: initial; ">giuz.blog1.ActivityBlog1"
                  android:label="@string/app_name"
                  android:permission="<u style="outline-style: none; outline-width: initial; outline-color: initial; ">giuz.permission.SEE">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

     <permission android:protectionLevel="normal" android:name="giuz.permission.SEE">
</permission>


</manifest> 


下划线部分是要注意的。
第一个下划线,这个Activity的android:name要写包名+类名:giuz.blog1.ActivityBlog1,不然等下会报找不到Activity的错误。
<permission android:protectionLevel="normal" android:name="giuz.permission.SEE"></permission>这句,
android:protectionLevel是必须要的,它的值normal或者dangerous、signature、signatureOrSystem。
android:name的值就是自定义的权限,格式是**.permission.**(giuz.x.permission.SEE也可以的)。

B的实现
B的Activity里通过Intent来访问,在我的代码里,下面的代码是放在一个按钮的点击事件中的:
Intent intent = new Intent();
//下面是用Component实现
//如果我写成intent.setClassName("giuz.blog1", "giuz.blog1.ActivityBlog1")
//却会报错,不理解。
intent.setComponent(new ComponentName("giuz.blog1", "giuz.blog1.ActivityBlog1"));
startActivity(intent)
第二行的第一个参数是A的那个被访问的Activity的包名,第二个参数是包名+类名因为A现在有了自定义的权限,而B现在还没有权限访问,所以如果现在访问会出现 Permission Denial的报错。给B加上权限,就是在B的manifest.xml里加上下面这句<uses-permission android:name="giuz.permission.SEE"></uses-permission> 

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Android 完全退出程序
    • 原创:Android应用开发-Andorid歌词秀,含源码
    • android 屏幕保护
    • Android手机软件汉化教程---第四课 dex文件汉化
    • 众多Android 开源项目推荐,给力工作给力学习
    • Android Audio代码分析4
    • Android得到已安装的应用程序信息!
    • Android开发者指南(29) —— USB Host and Accessory
    • Android成长的幕后推手:工程师鲁宾
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1