Handle EACCESS in BackupModule
This commit is contained in:
parent
5dd569ef72
commit
d2a1c432bb
|
@ -20,6 +20,7 @@
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
|
android:requestLegacyExternalStorage="true"
|
||||||
android:theme="@style/AppTheme">
|
android:theme="@style/AppTheme">
|
||||||
<activity
|
<activity
|
||||||
android:name=".TimerDone"
|
android:name=".TimerDone"
|
||||||
|
@ -44,6 +45,7 @@
|
||||||
android:name=".StopAlarm"
|
android:name=".StopAlarm"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:process=":remote" />
|
android:process=":remote" />
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".AlarmService"
|
android:name=".AlarmService"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
|
|
|
@ -1,23 +1,27 @@
|
||||||
package com.massive
|
package com.massive
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
import android.app.AlarmManager
|
import android.app.AlarmManager
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
|
import android.content.pm.PackageManager
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.util.Log
|
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
|
import androidx.core.app.ActivityCompat
|
||||||
import com.facebook.react.bridge.ReactApplicationContext
|
import com.facebook.react.bridge.ReactApplicationContext
|
||||||
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
||||||
import com.facebook.react.bridge.ReactMethod
|
import com.facebook.react.bridge.ReactMethod
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileInputStream
|
import java.io.FileInputStream
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
|
import java.io.IOException
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
class BackupModule constructor(context: ReactApplicationContext?) :
|
class BackupModule constructor(context: ReactApplicationContext?) :
|
||||||
ReactContextBaseJavaModule(context) {
|
ReactContextBaseJavaModule(context) {
|
||||||
val context: ReactApplicationContext = reactApplicationContext
|
val context: ReactApplicationContext = reactApplicationContext
|
||||||
|
@ -25,25 +29,51 @@ class BackupModule constructor(context: ReactApplicationContext?) :
|
||||||
private val copyReceiver = object : BroadcastReceiver() {
|
private val copyReceiver = object : BroadcastReceiver() {
|
||||||
@RequiresApi(Build.VERSION_CODES.O)
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
override fun onReceive(context: Context?, intent: Intent?) {
|
override fun onReceive(context: Context?, intent: Intent?) {
|
||||||
Log.d("BackupModule", "Backing up database...")
|
|
||||||
val sourceFile = File(context?.getDatabasePath("massive.db")!!.path)
|
val sourceFile = File(context?.getDatabasePath("massive.db")!!.path)
|
||||||
|
|
||||||
val targetDir =
|
val targetDir =
|
||||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
|
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
|
||||||
val targetFile = File(targetDir, "massive.db")
|
var targetFile = File(targetDir, "massive.db")
|
||||||
|
var count = 0
|
||||||
|
|
||||||
|
try {
|
||||||
val input = FileInputStream(sourceFile)
|
val input = FileInputStream(sourceFile)
|
||||||
val output = FileOutputStream(targetFile)
|
val output = FileOutputStream(targetFile)
|
||||||
|
|
||||||
input.copyTo(output)
|
input.copyTo(output)
|
||||||
input.close()
|
input.close()
|
||||||
output.close()
|
output.close()
|
||||||
|
} catch (e: IOException) {
|
||||||
|
while (targetFile.exists()) {
|
||||||
|
count++
|
||||||
|
targetFile = File(targetDir, "massive (${count}).db")
|
||||||
|
}
|
||||||
|
val input = FileInputStream(sourceFile)
|
||||||
|
val output = FileOutputStream(targetFile)
|
||||||
|
input.copyTo(output)
|
||||||
|
input.close()
|
||||||
|
output.close()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.M)
|
@RequiresApi(Build.VERSION_CODES.M)
|
||||||
@ReactMethod
|
@ReactMethod
|
||||||
fun start() {
|
fun start() {
|
||||||
|
val permission: Int =
|
||||||
|
ActivityCompat.checkSelfPermission(
|
||||||
|
reactApplicationContext,
|
||||||
|
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||||
|
)
|
||||||
|
if (permission != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
ActivityCompat.requestPermissions(
|
||||||
|
currentActivity!!,
|
||||||
|
arrayOf<String>(
|
||||||
|
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||||
|
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||||
|
),
|
||||||
|
1
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
val alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
val alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
||||||
val intent = Intent(COPY_BROADCAST)
|
val intent = Intent(COPY_BROADCAST)
|
||||||
val pendingIntent =
|
val pendingIntent =
|
||||||
|
|
Loading…
Reference in New Issue
Block a user