Присоединение базы данных Android SQLite к Gmail

Мне нужно прикрепить мою базу данных SQLite к электронной почте Gmail.

Я считаю, что использование Content Provider необходимо, но я не могу понять это. Пожалуйста, помогите мне понять эту концепцию.

Моя БД находится в каталоге по умолчанию "data/data/packagename/databases/"

Моя база данных называется TBProvider.

Класс, расширяющий ContentProvider, также называется TBProvider.

TBProvider

public class TBProvider extends ContentProvider {

    static String PROVIDER_NAME =  
            "com.sas.aap.tbprovider";

    public static Uri CONTENT_URI = 
            Uri.parse("content://com.sas.aap.tbprovider");

    public static final String _ID = "_id";

    private static final int TB = 1;

    private static final UriMatcher uriMatcher;
        static{
            uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
            uriMatcher.addURI(PROVIDER_NAME, "*", TB);
        }


    public static final String DATABASE_NAME = "TBProvider";

    private SQLiteDatabase myTBProvider;



    private static class TBDBHelper extends SQLiteOpenHelper{

        TBDBHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DATABASE_CREATE);


    @Override
    public String getType(Uri uri) {
        switch (uriMatcher.match(uri)){
        case TB:
            return "vnd.android.cursor.dir/com.sas.aap.tbprovider ";        
        default:
            throw new IllegalArgumentException("Unsupported URI: " + uri);
        }
    }

    @Override
    public boolean onCreate() {
        Context context = getContext();
        TBDBHelper dbHelper = new TBDBHelper(context);
        myTBProvider = dbHelper.getWritableDatabase();
        return (myTBDatabase == null)? false:true;                  
    }
}

Электронная почта:

 public class Email extends Activity {

String personsEmail = "[email protected]";
EditText personsName;
String emailAdd, name;
Button sendEmail;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.email);     

    sendEmail = (Button) findViewById(R.id.bSEmail);        
    sendEmail.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            String subject = "Subject";

            Intent emailIntent = new Intent(Intent.ACTION_SEND);
            emailIntent.setType("vnd.android.cursor.dir/com.sas.aap.tbprovider ");      
            emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
            emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, 
                    TBProvider.CONTENT_URI);
            startActivity(emailIntent);

            }
        });
    }
}

Манифест:

      android:name="com.sas.aap.TBProvider"
      android:authorities="com.sas.aap.tbprovider"
      android:exported="true">

ИЗМЕНИТЬ:

Я получаю следующий LogCat:

Writing exception to parcel
java.lang.IllegalArgumentException: Unsupported URI: content://com.sas.aap.tbprovider
at com.sas.aap.TBProvider.getType(TBProvider.java130)
at android.content.ContentProvider$Transport.getType(TBProvider.java:130)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:135)
at android.os.Binder.execTransact(Binder.java:367)
at dalvik.system.NativeStart.run(Native Method)

Я должен закончить это к Суперкубку! Дайте мне знать, если вам нужна дополнительная информация. Я буду бодрствовать с этого момента, пока не решу это. Пожалуйста и спасибо вам!


person Shawn    schedule 02.02.2013    source источник


Ответы (1)


Я ПОНЯЛ!

public ParcelFileDescriptor openFile(Uri uri, String mode)
        throws FileNotFoundException {
    File cacheDir = getContext().getDatabasePath(DATABASE_NAME);    
    return ParcelFileDescriptor.open(cacheDir, ParcelFileDescriptor.MODE_READ_ONLY);                    
person Shawn    schedule 03.02.2013