Android SQLite доступ для чтения - PullRequest
0 голосов
/ 24 марта 2011

Я хочу читать (только) записи из data / data / com.android.providers.telephony / database / mmssms.db (я не знаю официального API и т. Д., Но поскольку у него нет официального API, я должен это сделать).Я думал, что могу сделать это, как написано Как получить доступ к существующей базе данных sqlite в Android? в последнем ответе, просто

SQLiteDatabase db = SQLiteDatabase.openDatabase("data/data/com.android.providers.telephony/databases/mmssms.db ", null, 0); 

, но система не может открыть эту БДфайл.Затем я подумал, что мне, возможно, придется создать полноценный класс DB Helper

package com.test.dbaccess;


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DbAdapterMms 
{
    private final Context ctx;
    private DatabaseHelper dbHelper;
    public SQLiteDatabase db;

    private  static class DatabaseHelper extends SQLiteOpenHelper 
    {
        private final Context ctx;

        DatabaseHelper(Context context) 
        {
            super(context, "data/data/com.android.providers.telephony/databases/mmssms.db", null, 1);

            this.ctx = context;
        }

        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            //do nothing, this should exist
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        {
            //do nothing, reading only
        }


    }

    public DbAdapterMms(Context context) 
    {
        this.ctx = context;
    }

    public void open()
    {
        dbHelper = new DatabaseHelper(ctx);
        db = dbHelper.getReadableDatabase();
    }

    public void close() 
    {
        dbHelper.close();
    }
}

Это все еще не работает, на этот раз я думаю, что это может быть проблемой в вызове super ();с тех пор там должна быть дана DBVersion.Версия, которую я не знаю, я просто хочу прочитать существующую базу данных.Не может быть ракеты ...

Любая помощь?Спасибо, А.

Ответы [ 2 ]

2 голосов
/ 24 марта 2011

Я думаю, что вы не можете прочитать базу данных другого приложения. Как и в Android, каждое приложение имеет свое собственное место хранения в файловой системе, к которому нет доступа из других процессов. Единственное исключение - если в файле манифеста определено, что другим приложениям разрешен доступ к данным. Поскольку вы пытаетесь получить доступ к данным приложения, которым вы не владеете, вы не можете редактировать его файл манифеста, чтобы предоставить себе доступ к данным.

Единственный способ прочитать базу данных - это получить телефон с рутом. Затем вы можете вытащить базу данных на вашем ПК и вернуть ее обратно в магазин вашего приложения. Но я думаю, что это не то, что вы ищете.

1 голос
/ 24 марта 2011

Вы можете использовать что-то вроде этого, чтобы открыть базу данных smsmms

Cursor cSys = getContentResolver().query("content://mms-sms",null, null, null,null);

Используя этот курсор, вы можете управлять базой данных.

получение списка ммс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...