Skip to content

Commit

Permalink
Fix: LOCATION_SERVICE and WRITE_EXTERNAL_STORAGE permission request
Browse files Browse the repository at this point in the history
  • Loading branch information
ziqin committed Aug 19, 2018
1 parent 031d0eb commit 9c798ef
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 6 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ android {
applicationId "in.wangziq.fitnessrecorder"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
versionCode 2
versionName "0.1.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package in.wangziq.fitnessrecorder.activities;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
Expand All @@ -21,6 +25,8 @@
public final class ExportDataActivity extends AppCompatActivity {

private static final String TAG = ExportDataActivity.class.getSimpleName();
private static final int WRITE_EXTERNAL_REQUEST = 1;

private File mAppDir;

@Override
Expand All @@ -35,7 +41,23 @@ protected void onCreate(Bundle savedInstanceState) {
noticeText.setText(getString(R.string.export_tip, mAppDir.toString()));

Button exportButton = findViewById(R.id.btn_export);
exportButton.setOnClickListener(view -> new Thread(this::saveDbFile).run());
exportButton.setOnClickListener(view -> new Thread(this::requestWriteExternalPermissionAndExport).run());
}

private void requestWriteExternalPermissionAndExport() {
final String PERMISSION = Manifest.permission.WRITE_EXTERNAL_STORAGE;
if (ContextCompat.checkSelfPermission(this, PERMISSION) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, PERMISSION)) {
Toast.makeText(this, R.string.toast_need_write_external, Toast.LENGTH_SHORT).show();
Log.i(TAG, "requestWriteExternalPermission: denied in the past");
} else {
ActivityCompat.requestPermissions(this, new String[] {PERMISSION}, WRITE_EXTERNAL_REQUEST);
Log.i(TAG, "requestWriteExternalPermission: requesting");
}
} else {
Log.i(TAG, "requestLocationPermissionAndScanBt: permission already granted");
saveDbFile();
}
}

// TODO: use an intentService to copy files
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package in.wangziq.fitnessrecorder.activities;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
Expand Down Expand Up @@ -35,7 +39,7 @@
public final class ScanBandActivity extends AppCompatActivity {

private static final String TAG = ScanBandActivity.class.getSimpleName();

private static final int LOCATION_PERMISSION_REQUEST = 1;
private static final int SCAN_TIMEOUT = 10 * 1000;

private DevicesInfoAdapter mDevicesInfoAdapter;
Expand All @@ -53,7 +57,9 @@ protected void onCreate(Bundle savedInstanceState) {
devicesRecyclerView.setAdapter(mDevicesInfoAdapter);

CommService.startActionDisconnect(this);
new Handler().postDelayed(this::bleScan, 666);
// new Handler().postDelayed(this::bleScan, 666);
// requestLocationPermissionAndScanBt();
new Handler().postDelayed(this::requestLocationPermissionAndScanBt, 500);
}

@Override
Expand All @@ -74,12 +80,46 @@ public boolean onCreateOptionsMenu(Menu menu) {
mScanMenuItem = menu.findItem(R.id.item_scan);
mScanMenuItem.setOnMenuItemClickListener(menuItem -> {
if (bleManager.getScanSate() == BleScanState.STATE_SCANNING) bleManager.cancelScan();
else bleScan();
else requestLocationPermissionAndScanBt();
return true;
});
return ans;
}

private void requestLocationPermissionAndScanBt() {
final String PERMISSION = Manifest.permission.ACCESS_COARSE_LOCATION;
if (ContextCompat.checkSelfPermission(this, PERMISSION) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, PERMISSION)) {
Toast.makeText(this, R.string.toast_need_location_permission, Toast.LENGTH_SHORT).show();
Log.i(TAG, "requestLocationPermissionAndScanBt: denied in the past");
} else {
ActivityCompat.requestPermissions(this, new String[] {PERMISSION}, LOCATION_PERMISSION_REQUEST);
Log.i(TAG, "requestLocationPermissionAndScanBt: requesting");
}
} else {
Log.i(TAG, "requestLocationPermissionAndScanBt: permission already granted");
bleScan();
}
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case LOCATION_PERMISSION_REQUEST:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.i(TAG, "onRequestPermissionsResult: location permission granted");
// bleScan();
} else {
Log.i(TAG, "onRequestPermissionsResult: location permission denied");
Toast.makeText(this, R.string.toast_need_location_permission, Toast.LENGTH_SHORT).show();
}
break;
default:
Log.i(TAG, "onRequestPermissionsResult: unknown request: " + requestCode);
}
}

private void bleScan() {
BleManager bleManager = BleManager.getInstance();
if (!bleManager.isBlueEnable()) {
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-zh-rCN/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,6 @@
<string name="item_scan">扫描</string>
<string name="item_stop_scan">停止扫描</string>
<string name="notify_measuring">心率测量进行中</string>
<string name="toast_need_location_permission">扫描手环需要定位权限</string>
<string name="toast_need_write_external">需要读写外置存储以导出数据</string>
</resources>
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
<string name="toast_export_state_fail">Failed to export database: external storage unavailable!</string>
<string name="toast_export_copy_fail">Failed to export database: error occurred when copying the file!</string>
<string name="toast_export_succeed">Database exported successfully!</string>
<string name="toast_need_location_permission">Location service permission is required for scanning MI Band!</string>
<string name="toast_need_write_external">To export data, writing external storage is required!</string>

<string name="export_tip">Your data will be exported to\n%1$s</string>
<string name="default_heart_rate"> </string>
Expand Down

0 comments on commit 9c798ef

Please sign in to comment.