@@ -121,11 +121,10 @@ public void onCreate(Bundle savedInstanceState) {
121
121
122
122
//receiver to map updating
123
123
LocalBroadcastManager .getInstance (this ).registerReceiver (updMap , new IntentFilter ("update_map" ));
124
-
125
- if ( Build . VERSION . SDK_INT >= 23 && ContextCompat . checkSelfPermission ( this , Manifest .permission .ACCESS_FINE_LOCATION ) == PackageManager . PERMISSION_DENIED ) {
126
- ActivityCompat . requestPermissions ( this , new String [] { Manifest . permission . ACCESS_FINE_LOCATION }, 1 );
124
+ if ( Build . VERSION . SDK_INT >= 23 ) {
125
+ requirePermissions ( new String []{ Manifest .permission .ACCESS_FINE_LOCATION , Manifest . permission . WRITE_EXTERNAL_STORAGE }, 1 );
126
+ }
127
127
}
128
- }
129
128
130
129
public void onResume () {
131
130
super .onResume ();
@@ -143,6 +142,19 @@ public void onDestroy() {
143
142
super .onDestroy ();
144
143
}
145
144
145
+ private void requirePermissions (@ NonNull String [] requiredPerm , int requestCode ) {
146
+ //request missing permissions
147
+ ArrayList <String > lacking = new ArrayList <>();
148
+ if (requiredPerm .length == 0 ) return ;
149
+ for (String permission : requiredPerm ) {
150
+ if (ContextCompat .checkSelfPermission (getApplicationContext (), permission ) == PackageManager .PERMISSION_DENIED ) {
151
+ lacking .add (permission );
152
+ }
153
+ }
154
+
155
+ if (lacking .size () == 0 ) return ;
156
+ ActivityCompat .requestPermissions (MapsActivity .this , lacking .toArray (new String [0 ]), requestCode );
157
+ }
146
158
147
159
private void trackRedraw () {
148
160
Cursor query = db .query ("tracking_table" , new String [] {"_id" , "lat" , "lon" , "speed" , "date" }, "track_id = ?" , new String [] {String .valueOf (track_id )}, null , null , "_id ASC" );
@@ -182,8 +194,11 @@ public void onReceive(Context context, Intent intent) {
182
194
};
183
195
184
196
public void onRequestPermissionsResult (int requestCode , @ NonNull String [] permissions , @ NonNull int [] grantResults ) {
185
- if (grantResults [0 ] == PackageManager .PERMISSION_DENIED ) {
186
- Toast .makeText (this , R .string .no_permits_received , Toast .LENGTH_SHORT ).show ();
197
+ for (int perm : grantResults ) {
198
+ if (perm == PackageManager .PERMISSION_DENIED ) {
199
+ Toast .makeText (this , R .string .no_permits_received , Toast .LENGTH_SHORT ).show ();
200
+ break ;
201
+ }
187
202
}
188
203
}
189
204
0 commit comments