ContentProvider

Posted by アライさん on 2019年10月22日
1
2
3
4
<provider
android:name=".alarm.AlarmContentProvider"
android:authorities="com.testapp.AlarmContentProvider"
android:exported="true" />

## ContentProvider
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package com.testapp.alarm

import android.content.ContentProvider
import android.content.ContentValues
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.net.Uri


class AlarmContentProvider : ContentProvider() {
companion object {
const val AUTOHORITY = "com.testapp.AlarmContentProvider"
}

lateinit var alarmDBHelper: AlarmDBHelper
lateinit var db: SQLiteDatabase

override fun onCreate(): Boolean {
alarmDBHelper = AlarmDBHelper(context)
db = alarmDBHelper.writableDatabase
return true
}

override fun insert(uri: Uri, values: ContentValues?): Uri? {
db.insert(AlarmDBHelper.TABLE_NAME, null, values)
context?.contentResolver?.notifyChange(uri, null)
return uri
}

override fun query(
uri: Uri,
projection: Array<String>?,
selection: String?,
selectionArgs: Array<String>?,
sortOrder: String?
): Cursor? {
return db.query(
AlarmDBHelper.TABLE_NAME,
projection,
selection,
selectionArgs,
null,
null,
sortOrder,
null
)
}


override fun update(
uri: Uri,
values: ContentValues?,
selection: String?,
selectionArgs: Array<String>?
): Int {
return 0
}

override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int {
return 0
}

override fun getType(uri: Uri): String? {
return null
}
}

## SQLiteOpenHelper
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.testapp.alarm

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

class AlarmDBHelper constructor(
context: Context,
databaseName: String = DATABASE_NAME,
databaseVersion: Int = 1
) : SQLiteOpenHelper(context, databaseName, null, databaseVersion) {
companion object{
const val DATABASE_NAME="alarm_db"
const val TABLE_NAME="alarm"
}

override fun onCreate(db: SQLiteDatabase?) {
db?.execSQL("CREATE TABLE IF NOT EXISTS $TABLE_NAME(_id INTEGER PRIMARY KEY AUTOINCREMENT, ringId INTEGER, expireTime INTEGER,repeatTimes INTEGER,label TEXT,isOpen INTEGER,weekList TEXT)")
}

override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
}
}

## 其他app调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  lateinit var resolver: ContentResolver
val uri_user = Uri.parse("content://com.testapp.AlarmContentProvider")
resolver = contentResolver

val values = ContentValues()
values.put("ringId", "0")
values.put("expireTime", System.currentTimeMillis() / 1000)//int
values.put("repeatTimes", 2)//int
values.put("label", "Jordan")//string
values.put("isOpen", 1)//int
values.put("weekList", "1,3,5")//string,用","分割
resolver.insert(uri_user, values)


val cursor = resolver.query(uri_user, arrayOf<String>(), null, null, null)
while (cursor!!.moveToNext()) {
Log.d("tag",""+cursor.getInt(0))
Log.d("tag",""+cursor.getString(1))
Log.d("tag",""+cursor.getInt(2))
Log.d("tag",""+cursor.getInt(3))
Log.d("tag",""+cursor.getString(4))
Log.d("tag",""+cursor.getInt(5))
Log.d("tag",""+cursor.getString(6))
}
cursor.close()