Chia sẻ database giữa các ứng dụng trong android
Bài viết chia sẻ database giữa các ứng dụng trong android sẽ hướng dẫn các bạn làm thế nào để sử dụng chung một database giữa các ứng dụng Android được cài đặt trên cùng một thiết bị.
Như các bạn đã biết, SQLite là một hệ quản trị cơ sở dữ liệu dành cho thiết bị di động và Android là một trong những nền tảng hỗ trợ SQLite.
Việc chúng ta xây dựng một ứng dụng có database thì database đó chỉ tồn tại bên trong một ứng dụng.
Điều đó có nghĩa là chỉ có ứng dụng đó mới được phép truy cập database mà nó tạo ra. Và database này sẽ bị xoá nếu ứng dụng đó bị gỡ bỏ khỏi thiết bị.
Có những trường hợp chúng ta muốn một database được tạo ra bởi một ứng dụng và được chia sẻ để những ứng dụng khác sử dụng. Đó giải quyết vấn đề này, Android cung cấp Content Provider.
Chia sẻ database giữa các ứng dụng trong android – Giới thiệu Content Provider
Content Provier có thể hiểu là một cơ sở dữ liệu mà ở đó dữ liệu được chia sẻ giữa các ứng dụng trong cùng một thiết bị.
Hình bên dưới mô tả trong cùng một thiết bị có 3 ứng dụng là App 1, App 2 và App 3. Trong đó database được tạo ở App 1 và được chia sẻ sử dụng Content Provider để App 2, App 3 có thể sử dụng.
Content URI
Để sử dụng một content provider, bạn phải chỉ định một chuỗi gọi là content URI và có định dạng như sau:
<prefix>://<authority>/<data_type>/<id>
Bảng bên dưới trình bày chi tiết từng phần của content URI
prefix | Luôn luôn là content |
authority | Chỉ định tên của content provider |
data_type | Xác định kiểu dữ liệu |
id | Xác định bản ghi được yêu cầu |
Một số ví dụ về content URI
Content URI dùng để truy vấn hộp thư đến SMS
content://sms/inbox
Content URI dùng để truy vấn tin nhắn có mã bằng 5 của hộp thư đến SMS
content://sms/inbox/5
Content URI dùng để truy vấn những tin nhắn đã được gửi
content://sms/sent
Content URI dùng để truy vấn những tin nhắn chưa được gửi
content://sms/draft
Chia sẻ database các những ứng dụng trong android – Các bước thực hiện
Tóm tắt
Tạo một ứng dụng tên PlatformManagement sử dụng một database tên platform.db. Trong ứng dụng này cho phép người dùng nhập tên các hệ điều hành dành cho thiết bị di động như Andoid, iOS, Windows Phone và lưu vào platform.db.
Tạo một ứng dụng khác tên MobileOS dùng để hiển thị danh sách hệ điều hành mà ứng dụng PlatformManagement đã tạo.
Các bước thực hiện
Bước 1: Tạo một project tên PlatformManagement
Mở Android Studio -> New -> New Project -> nhập Application name là PlatformManagement, chỉ định thư mục chứa source code tại Project location -> New -> chọn “Phone and Tablet”, Minimum SDK phù hợp -> Next -> chọn “Empty Activity” -> Next -> Finish
1. Tạo một Java class và đặt tên DBHandling
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by http://giasutinhoc.vn */ public class DBHandling extends SQLiteOpenHelper { private final String TABLE_PLATFORM = "tbl_platform"; public DBHandling(Context c) { super(c, "platform.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { String sql = " CREATE TABLE " + TABLE_PLATFORM + " (id INTEGER PRIMARY KEY AUTOINCREMENT, " + " name TEXT NOT NULL);"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
2. Tạo Java class và đặt tên PlatformProvider
Bạn đọc tải code đầy đủ của PlatformProvider.java
3. Mở app/res/layout/activity_main.xml vàthêm 1 EditText, 2 Button
4. Mở app/java/core.android/MainActivity.java và bổ sung đoạn code được tô màu đỏ (Trong đó core.android là tên package)
import android.content.ContentValues; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // Xử lý cho nút "Thêm" public void addPlatform(View view) { ContentValues cv = new ContentValues(); cv.put(PlatformProvider.name, ((EditText) findViewById(R.id.tvName)).getText().toString()); Uri uri = getContentResolver().insert(PlatformProvider.CONTENT_URI, cv); Toast.makeText(this, "Thêm thành công!", Toast.LENGTH_SHORT).show(); } // Xử lý cho nút "Thoát" public void exit(View v) { finish(); } }
5. Mở app/manifests/AndroidManifest.xml và khai báo provider trước thẻ đóng </application>
<provider android:name=".PlatformProvider" android:authorities="core.android.PlatformProvider" android:exported="true" android:multiprocess="true" > </provider>
6. Build và run ứng dụng; thêm 2 nền tảng là Android và iOS
Bước 2: Tạo một project khác tên MobileOS
1. Mở app/res/layout/activity_main.xml vàthêm 1 Button, 1 TextView
2. Mở app/java/core.android/MainActivity.java và bổ sung đoạn code được tô màu đỏ (Trong đó core.android là tên package)
import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.database.Cursor; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> { TextView tvResult; CursorLoader cl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvResult= (TextView) findViewById(R.id.result); } // Xử lý cho nút "Hiển thị" public void display(View view) { getSupportLoaderManager().initLoader(1, null, this); } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { cl = new CursorLoader(this, Uri.parse("content://core.android.PlatformProvider/pf"), null, null, null, null); return cursorLoader; } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { data.moveToFirst(); StringBuilder sb = new StringBuilder(); while (!data.isAfterLast()) { sb.append("\n" + data.getString(data.getColumnIndex("id")) + "-" + data.getString(data.getColumnIndex("name"))); data.moveToNext(); } resultView.setText(sb); } @Override public void onLoaderReset(Loader<Cursor> loader) { } }
3. Build và run ứng dụng