Updated Permissions requests to split into 3 groups, and made the rationale screens consistent with the 'Prominent Disclosure' text required by Google Play Store.
This commit is contained in:
@@ -2,8 +2,8 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
package="uk.org.openseizuredetector"
|
package="uk.org.openseizuredetector"
|
||||||
android:versionCode="95"
|
android:versionCode="96"
|
||||||
android:versionName="4.0.0s">
|
android:versionName="4.0.0t">
|
||||||
<!-- android:allowBackup="false" -->
|
<!-- android:allowBackup="false" -->
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
<uses-permission android:name="android.permission.BLUETOOTH" />
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
||||||
|
|||||||
@@ -76,22 +76,6 @@ public class OsdUtil {
|
|||||||
private final String ALARMLOG = "AlarmLog";
|
private final String ALARMLOG = "AlarmLog";
|
||||||
private final String DATALOG = "DataLog";
|
private final String DATALOG = "DataLog";
|
||||||
|
|
||||||
public final String[] REQUIRED_PERMISSIONS = {
|
|
||||||
//Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
|
||||||
Manifest.permission.WAKE_LOCK,
|
|
||||||
};
|
|
||||||
|
|
||||||
public final String[] SMS_PERMISSIONS = {
|
|
||||||
Manifest.permission.SEND_SMS,
|
|
||||||
Manifest.permission.ACCESS_FINE_LOCATION,
|
|
||||||
//Manifest.permission.ACCESS_BACKGROUND_LOCATION,
|
|
||||||
Manifest.permission.READ_PHONE_STATE,
|
|
||||||
};
|
|
||||||
|
|
||||||
public final String[] SMS_PERMISSIONS_2 = {
|
|
||||||
Manifest.permission.ACCESS_BACKGROUND_LOCATION,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Based on http://stackoverflow.com/questions/7440473/android-how-to-check-if-the-intent-service-is-still-running-or-has-stopped-running
|
* Based on http://stackoverflow.com/questions/7440473/android-how-to-check-if-the-intent-service-is-still-running-or-has-stopped-running
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
package uk.org.openseizuredetector;
|
package uk.org.openseizuredetector;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.Manifest;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
@@ -51,7 +51,6 @@ import androidx.appcompat.app.AppCompatActivity;
|
|||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
|
||||||
import com.rohitss.uceh.UCEHandler;
|
import com.rohitss.uceh.UCEHandler;
|
||||||
|
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
@@ -82,9 +81,34 @@ public class StartupActivity extends AppCompatActivity {
|
|||||||
private String mPebbleAppPackageName = null;
|
private String mPebbleAppPackageName = null;
|
||||||
private boolean mBatteryOptDialogDisplayed = false;
|
private boolean mBatteryOptDialogDisplayed = false;
|
||||||
private AlertDialog mBatteryOptDialog;
|
private AlertDialog mBatteryOptDialog;
|
||||||
private boolean mSMSPermissionsRequested;
|
private boolean mLocationPermissions1Requested;
|
||||||
|
private boolean mLocationPermissions2Requested;
|
||||||
|
private boolean mSmsPermissionsRequested;
|
||||||
private boolean mPermissionsRequested;
|
private boolean mPermissionsRequested;
|
||||||
private boolean mSMSPermissions2Requested;
|
|
||||||
|
public final String[] REQUIRED_PERMISSIONS = {
|
||||||
|
//Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||||
|
Manifest.permission.WAKE_LOCK,
|
||||||
|
};
|
||||||
|
|
||||||
|
public final String[] SMS_PERMISSIONS_1 = {
|
||||||
|
Manifest.permission.SEND_SMS,
|
||||||
|
Manifest.permission.READ_PHONE_STATE,
|
||||||
|
};
|
||||||
|
|
||||||
|
public final String[] LOCATION_PERMISSIONS_1 = {
|
||||||
|
Manifest.permission.SEND_SMS,
|
||||||
|
Manifest.permission.ACCESS_FINE_LOCATION,
|
||||||
|
//Manifest.permission.ACCESS_BACKGROUND_LOCATION,
|
||||||
|
Manifest.permission.READ_PHONE_STATE,
|
||||||
|
};
|
||||||
|
|
||||||
|
public final String[] LOCATION_PERMISSIONS_2 = {
|
||||||
|
Manifest.permission.ACCESS_BACKGROUND_LOCATION,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -161,13 +185,6 @@ public class StartupActivity extends AppCompatActivity {
|
|||||||
mUtil.writeToSysLogFile("StartupActivity.onStart()");
|
mUtil.writeToSysLogFile("StartupActivity.onStart()");
|
||||||
TextView tv;
|
TextView tv;
|
||||||
|
|
||||||
if (arePermissionsOK()) {
|
|
||||||
Log.i(TAG, "onStart() - Permissions OK");
|
|
||||||
} else {
|
|
||||||
Log.i(TAG, "onStart() - Permissions Not OK - requesting them");
|
|
||||||
requestPermissions(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
String versionName = mUtil.getAppVersionName();
|
String versionName = mUtil.getAppVersionName();
|
||||||
tv = (TextView) findViewById(R.id.appNameTv);
|
tv = (TextView) findViewById(R.id.appNameTv);
|
||||||
tv.setText("OpenSeizureDetector V" + versionName);
|
tv.setText("OpenSeizureDetector V" + versionName);
|
||||||
@@ -273,7 +290,7 @@ public class StartupActivity extends AppCompatActivity {
|
|||||||
tv = (TextView) findViewById(R.id.textItem1);
|
tv = (TextView) findViewById(R.id.textItem1);
|
||||||
pb = (ProgressBar) findViewById(R.id.progressBar1);
|
pb = (ProgressBar) findViewById(R.id.progressBar1);
|
||||||
if (arePermissionsOK()) {
|
if (arePermissionsOK()) {
|
||||||
if (smsAlarmsActive && !areSMSPermissionsOK()) {
|
if (smsAlarmsActive && !areSMSPermissions1OK()) {
|
||||||
Log.i(TAG,"SMS permissions NOT OK");
|
Log.i(TAG,"SMS permissions NOT OK");
|
||||||
tv.setText(getString(R.string.SmsPermissionWarning));
|
tv.setText(getString(R.string.SmsPermissionWarning));
|
||||||
tv.setBackgroundColor(alarmColour);
|
tv.setBackgroundColor(alarmColour);
|
||||||
@@ -281,14 +298,20 @@ public class StartupActivity extends AppCompatActivity {
|
|||||||
//pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server));
|
//pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server));
|
||||||
//pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server));
|
//pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server));
|
||||||
requestSMSPermissions();
|
requestSMSPermissions();
|
||||||
//requestSMSPermissions2();
|
|
||||||
allOk = false;
|
allOk = false;
|
||||||
} else if (smsAlarmsActive && !areSMSPermissions2OK()) {
|
} else if (smsAlarmsActive && !areLocationPermissions1OK()) {
|
||||||
|
Log.i(TAG,"Location permissions NOT OK");
|
||||||
|
tv.setText(getString(R.string.SmsPermissionWarning));
|
||||||
|
tv.setBackgroundColor(alarmColour);
|
||||||
|
tv.setTextColor(alarmTextColour);
|
||||||
|
requestLocationPermissions1();
|
||||||
|
allOk = false;
|
||||||
|
} else if (smsAlarmsActive && !areLocationPermissions2OK()) {
|
||||||
Log.i(TAG,"SMS permissions2 NOT OK");
|
Log.i(TAG,"SMS permissions2 NOT OK");
|
||||||
tv.setText(getString(R.string.SmsPermissionWarning));
|
tv.setText(getString(R.string.SmsPermissionWarning));
|
||||||
tv.setBackgroundColor(alarmColour);
|
tv.setBackgroundColor(alarmColour);
|
||||||
tv.setTextColor(alarmTextColour);
|
tv.setTextColor(alarmTextColour);
|
||||||
requestSMSPermissions2();
|
requestLocationPermissions2();
|
||||||
allOk = false;
|
allOk = false;
|
||||||
} else {
|
} else {
|
||||||
tv.setText(getString(R.string.AppPermissionsOk));
|
tv.setText(getString(R.string.AppPermissionsOk));
|
||||||
@@ -535,36 +558,50 @@ public class StartupActivity extends AppCompatActivity {
|
|||||||
public boolean arePermissionsOK() {
|
public boolean arePermissionsOK() {
|
||||||
boolean allOk = true;
|
boolean allOk = true;
|
||||||
Log.v(TAG, "arePermissionsOK");
|
Log.v(TAG, "arePermissionsOK");
|
||||||
for (int i = 0; i < mUtil.REQUIRED_PERMISSIONS.length; i++) {
|
for (int i = 0; i < REQUIRED_PERMISSIONS.length; i++) {
|
||||||
if (ContextCompat.checkSelfPermission(this, mUtil.REQUIRED_PERMISSIONS[i])
|
if (ContextCompat.checkSelfPermission(this, REQUIRED_PERMISSIONS[i])
|
||||||
!= PackageManager.PERMISSION_GRANTED) {
|
!= PackageManager.PERMISSION_GRANTED) {
|
||||||
Log.i(TAG, mUtil.REQUIRED_PERMISSIONS[i] + " Permission Not Granted");
|
Log.i(TAG, REQUIRED_PERMISSIONS[i] + " Permission Not Granted");
|
||||||
allOk = false;
|
allOk = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return allOk;
|
return allOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean areSMSPermissionsOK() {
|
public boolean areSMSPermissions1OK() {
|
||||||
boolean allOk = true;
|
boolean allOk = true;
|
||||||
Log.v(TAG, "areSMSPermissionsOK()");
|
Log.v(TAG, "areSMSPermissions1 OK()");
|
||||||
for (int i = 0; i < mUtil.SMS_PERMISSIONS.length; i++) {
|
for (int i = 0; i < SMS_PERMISSIONS_1.length; i++) {
|
||||||
if (ContextCompat.checkSelfPermission(this, mUtil.SMS_PERMISSIONS[i])
|
if (ContextCompat.checkSelfPermission(this, SMS_PERMISSIONS_1[i])
|
||||||
!= PackageManager.PERMISSION_GRANTED) {
|
!= PackageManager.PERMISSION_GRANTED) {
|
||||||
Log.i(TAG, mUtil.SMS_PERMISSIONS[i] + " Permission Not Granted");
|
Log.i(TAG, "areSMSPermissions1OK: "+SMS_PERMISSIONS_1[i] + " Permission Not Granted");
|
||||||
allOk = false;
|
allOk = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return allOk;
|
return allOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean areSMSPermissions2OK() {
|
|
||||||
|
public boolean areLocationPermissions1OK() {
|
||||||
|
boolean allOk = true;
|
||||||
|
Log.v(TAG, "areLocationPermissions1 OK()");
|
||||||
|
for (int i = 0; i < LOCATION_PERMISSIONS_1.length; i++) {
|
||||||
|
if (ContextCompat.checkSelfPermission(this, LOCATION_PERMISSIONS_1[i])
|
||||||
|
!= PackageManager.PERMISSION_GRANTED) {
|
||||||
|
Log.i(TAG, LOCATION_PERMISSIONS_1[i] + " Permission Not Granted");
|
||||||
|
allOk = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return allOk;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean areLocationPermissions2OK() {
|
||||||
boolean allOk = true;
|
boolean allOk = true;
|
||||||
Log.v(TAG, "areSMSPermissions2OK()");
|
Log.v(TAG, "areSMSPermissions2OK()");
|
||||||
for (int i = 0; i < mUtil.SMS_PERMISSIONS_2.length; i++) {
|
for (int i = 0; i < LOCATION_PERMISSIONS_2.length; i++) {
|
||||||
if (ContextCompat.checkSelfPermission(this, mUtil.SMS_PERMISSIONS_2[i])
|
if (ContextCompat.checkSelfPermission(this, LOCATION_PERMISSIONS_2[i])
|
||||||
!= PackageManager.PERMISSION_GRANTED) {
|
!= PackageManager.PERMISSION_GRANTED) {
|
||||||
Log.i(TAG, mUtil.SMS_PERMISSIONS_2[i] + " Permission Not Granted");
|
Log.i(TAG, LOCATION_PERMISSIONS_2[i] + " Permission Not Granted");
|
||||||
allOk = false;
|
allOk = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -576,62 +613,87 @@ public class StartupActivity extends AppCompatActivity {
|
|||||||
Log.i(TAG, "requestPermissions() - request already sent - not doing anything");
|
Log.i(TAG, "requestPermissions() - request already sent - not doing anything");
|
||||||
} else {
|
} else {
|
||||||
Log.i(TAG, "requestPermissions() - requesting permissions");
|
Log.i(TAG, "requestPermissions() - requesting permissions");
|
||||||
for (int i = 0; i < mUtil.REQUIRED_PERMISSIONS.length; i++) {
|
for (int i = 0; i < REQUIRED_PERMISSIONS.length; i++) {
|
||||||
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,
|
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,
|
||||||
mUtil.REQUIRED_PERMISSIONS[i])) {
|
REQUIRED_PERMISSIONS[i])) {
|
||||||
Log.i(TAG, "shouldShowRationale for permission" + mUtil.REQUIRED_PERMISSIONS[i]);
|
Log.i(TAG, "shouldShowRationale for permission" + REQUIRED_PERMISSIONS[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ActivityCompat.requestPermissions(activity,
|
ActivityCompat.requestPermissions(activity,
|
||||||
mUtil.REQUIRED_PERMISSIONS,
|
REQUIRED_PERMISSIONS,
|
||||||
42);
|
42);
|
||||||
mPermissionsRequested = true;
|
mPermissionsRequested = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestSMSPermissions() {
|
public void requestSMSPermissions() {
|
||||||
if (mSMSPermissionsRequested) {
|
if (mSmsPermissionsRequested) {
|
||||||
Log.i(TAG, "requestSMSPermissions() - request already sent - not doing anything");
|
Log.i(TAG, "requestSMSPermissions() - request already sent - not doing anything");
|
||||||
} else {
|
} else {
|
||||||
Log.i(TAG, "requestSMSPermissions() - requesting permissions");
|
Log.i(TAG, "requestSMSPermissions() - requesting permissions");
|
||||||
mSMSPermissionsRequested = true;
|
mSmsPermissionsRequested = true;
|
||||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
|
||||||
this);
|
this);
|
||||||
alertDialogBuilder
|
alertDialogBuilder
|
||||||
.setTitle(R.string.permissions_required)
|
.setTitle(R.string.permissions_required)
|
||||||
.setMessage(R.string.SMS_permissions_rationale_1)
|
.setMessage(R.string.sms_permissions_rationale_1)
|
||||||
.setCancelable(false)
|
.setCancelable(false)
|
||||||
.setPositiveButton(getString(R.string.okBtnTxt), new DialogInterface.OnClickListener() {
|
.setPositiveButton(getString(R.string.okBtnTxt), new DialogInterface.OnClickListener() {
|
||||||
public void onClick(DialogInterface dialog, int id) {
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
dialog.cancel();
|
dialog.cancel();
|
||||||
Log.i(TAG,"requestSMSPermissions(): Launching ActivityCompat.requestPermissions()");
|
Log.i(TAG,"requestSMSPermissions(): Launching ActivityCompat.requestPermissions()");
|
||||||
ActivityCompat.requestPermissions(StartupActivity.this,
|
ActivityCompat.requestPermissions(StartupActivity.this,
|
||||||
mUtil.SMS_PERMISSIONS,
|
SMS_PERMISSIONS_1,
|
||||||
|
45);
|
||||||
|
}
|
||||||
|
}).create().show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void requestLocationPermissions1() {
|
||||||
|
if (mLocationPermissions1Requested) {
|
||||||
|
Log.i(TAG, "requestLocationPermissions1() - request already sent - not doing anything");
|
||||||
|
} else {
|
||||||
|
Log.i(TAG, "requestLocationPermissions1() - requesting permissions");
|
||||||
|
mLocationPermissions1Requested = true;
|
||||||
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
|
||||||
|
this);
|
||||||
|
alertDialogBuilder
|
||||||
|
.setTitle(R.string.permissions_required)
|
||||||
|
.setMessage(R.string.location_permissions_rationale_1)
|
||||||
|
.setCancelable(false)
|
||||||
|
.setPositiveButton(getString(R.string.okBtnTxt), new DialogInterface.OnClickListener() {
|
||||||
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
|
dialog.cancel();
|
||||||
|
Log.i(TAG,"requestLocationPermissions1(): Launching ActivityCompat.requestPermissions()");
|
||||||
|
ActivityCompat.requestPermissions(StartupActivity.this,
|
||||||
|
LOCATION_PERMISSIONS_1,
|
||||||
43);
|
43);
|
||||||
}
|
}
|
||||||
}).create().show();
|
}).create().show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestSMSPermissions2() {
|
public void requestLocationPermissions2() {
|
||||||
if (mSMSPermissions2Requested) {
|
if (mLocationPermissions2Requested) {
|
||||||
Log.i(TAG, "requestSMSPermissions2() - request already sent - not doing anything");
|
Log.i(TAG, "requestSMSPermissions2() - request already sent - not doing anything");
|
||||||
} else {
|
} else {
|
||||||
Log.i(TAG, "requestSMSPermissions2() - requesting permissions");
|
Log.i(TAG, "requestSMSPermissions2() - requesting permissions");
|
||||||
mSMSPermissions2Requested = true;
|
mLocationPermissions2Requested = true;
|
||||||
|
|
||||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
|
||||||
this);
|
this);
|
||||||
alertDialogBuilder
|
alertDialogBuilder
|
||||||
.setTitle(R.string.permissions_required)
|
.setTitle(R.string.permissions_required)
|
||||||
.setMessage(R.string.sms_permissions_2_rationale)
|
.setMessage(R.string.location_permissions_2_rationale)
|
||||||
.setCancelable(false)
|
.setCancelable(false)
|
||||||
.setPositiveButton(getString(R.string.okBtnTxt), new DialogInterface.OnClickListener() {
|
.setPositiveButton(getString(R.string.okBtnTxt), new DialogInterface.OnClickListener() {
|
||||||
public void onClick(DialogInterface dialog, int id) {
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
dialog.cancel();
|
dialog.cancel();
|
||||||
Log.i(TAG,"requestSMSPermissions(): Launching ActivityCompat.requestPermissions()");
|
Log.i(TAG,"requestSMSPermissions(): Launching ActivityCompat.requestPermissions()");
|
||||||
ActivityCompat.requestPermissions(StartupActivity.this,
|
ActivityCompat.requestPermissions(StartupActivity.this,
|
||||||
mUtil.SMS_PERMISSIONS_2,
|
LOCATION_PERMISSIONS_2,
|
||||||
44);
|
44);
|
||||||
}
|
}
|
||||||
}).create().show();
|
}).create().show();
|
||||||
|
|||||||
@@ -397,17 +397,23 @@
|
|||||||
https://openseizuredetector.org.uk web site.
|
https://openseizuredetector.org.uk web site.
|
||||||
|
|
||||||
</string>
|
</string>
|
||||||
<string name="SMS_permissions_rationale_1">
|
<string name="sms_permissions_rationale_1">
|
||||||
OpenSeizureDetector needs permission to <b>control your phone and send SMS messages</b> to be able to send SMS alerts.\n\n
|
OpenSeizureDetector needs permission to <b>read your phone state and send SMS messages</b> to enable it to send SMS alerts when it detects a seizure.\n\n
|
||||||
It needs <b>access to your location</b> so that the SMS alert can include a Google Maps link so your carer knows where you are to offer assistance.\n\n
|
With this permission enabled the App will <b>send an SMS message to the phone numbers you enter on th Alarm settings page of the app when it detects a seizure</b>.\n\n
|
||||||
Please grant the permissions in the following screens after pressing \'OK\' below....\n\n
|
Please grant the permissions in the following screens after pressing \'OK\' below....\n\n
|
||||||
You can change this later by going into the phone settings and selecting Apps->OpenSeizureDetector->Permissions
|
You can change this later by going into the phone settings and selecting Apps->OpenSeizureDetector->Permissions
|
||||||
</string>
|
</string>
|
||||||
<string name="sms_permissions_2_rationale">
|
<string name="location_permissions_rationale_1">
|
||||||
OpenSeizureDetector needs your permission to access your location when it is <b>running in the background</b>.\n\n
|
This App collects location data to enable it to send <b>SMS location alert</b> messages when it detects a seizure.\n\n
|
||||||
This is so it can send <b>SMS location alert</b> messages even if you do not have the OpenSeizureDetector main screen displayed on your phone when you have a seizure.\n\n
|
With this permission enabled the App will send an SMS message to the phone numbers you enter on the Alarm settings page of the app when it detects a seizure. <b>The message will include a Google Maps link to show your location</b>.\n\n
|
||||||
|
Please grant the permissions in the following screens after pressing \'OK\' below....\n\n
|
||||||
|
You can change this later by going into the phone settings and selecting Apps->OpenSeizureDetector->Permissions
|
||||||
|
</string>
|
||||||
|
<string name="location_permissions_2_rationale">
|
||||||
|
This App collects location data to enable it to send <b>SMS location alert</b> messages when it detects a seizure, <b>even even when the app is closed or not in use</b>.\n\n
|
||||||
|
With this permission enabled the App will send an SMS message to the phone numbers you enter on the Alarm settings page of the app when it detects a seizure. <b>The message will include a Google Maps link to show your location</b>.\n\n
|
||||||
Please grant the required permission by selecting "Allow all the time" on the next screen, after pressing \'OK\' below....\n\n
|
Please grant the required permission by selecting "Allow all the time" on the next screen, after pressing \'OK\' below....\n\n
|
||||||
You can change this later by going into the phone settings and selecting Apps->OpenSeizureDetector->Permissions
|
You can change this later by going into the phone settings and selecting Apps->OpenSeizureDetector->Permissions
|
||||||
</string>
|
</string>
|
||||||
<string name="permissions_required">Permissions Required</string>
|
<string name="permissions_required">Permissions Disclosure, Prominent :)</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user