2012-05-23 308 views
4

我已经构建了一个应用程序,现在我想使用我的新备份应用程序复制正在运行的应用程序的数据库。我做DB_PATH + DB_NAME,使用以下值创建我的数据库路径:从另一个应用程序访问一个应用程序的数据库

DB_PATH = "/data/data/iCam.Cam/"; 
DB_NAME = "testdb.db"; 

我有代码拷贝从给定的路径SD卡数据库。然而,当我使用下面的方法首先检查数据库,它返回false

public boolean checkDataBase() {  
    SQLiteDatabase checkDB = null; 

    try { 
     String myPath = DB_PATH + DB_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
    } catch (SQLiteException e) { 
     e.fillInStackTrace(); 
     // database does't exist yet. 
    } 

    if (checkDB != null) { 
     checkDB.close(); 
    } 

    return checkDB != null ? true : false; 
} 

就如何实现这一目标有什么建议?

+0

@ Rasel的回答是正确的。您应该使用实际应用程序中的contentProvider来共享数据库控制。你为什么要复制它? – drulabs

+0

我想复制它因为我的应用程序发送数据库到服务器,但它目前不发送一些数据将被上传到网络,所以我需要该数据库复制到SD卡,以便我可以通过邮件发送 – Trikaldarshi

回答

8

访问,则可以使用同一个数据库,只有当你在自定义内容提供商创建运行的应用程序数据库。

您不能直接从正在运行的应用程序访问数据库。

但是,如果您在自定义内容提供程序中创建正在运行的应用程序数据库,则可以在权限的帮助下直接访问数据库。

在这种情况下,您甚至不需要复制该数据库。

请将此link用于定制内容提供者。

3
​​ 读DDMS的教程

除非应用程序通过ContentProvider为您提供接口,否则无法访问其他应用程序的数据库。

2

Android Security. 由应用程序存储的所有数据都将被赋予一个应用程序的用户ID,而不是通常对其他包

相关问题