Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
permission_handler
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
songyanzhi
permission_handler
Commits
52d2bc4b
Commit
52d2bc4b
authored
Feb 28, 2020
by
Maurits van Beusekom
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow requesting permissions when location services are disabled
parent
7f9322c6
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
18 additions
and
63 deletions
+18
-63
README.md
+1
-6
android/src/main/java/com/baseflow/permissionhandler/PermissionHandlerPlugin.java
+6
-30
example/ios/Runner.xcodeproj/project.pbxproj
+1
-1
example/lib/main.dart
+1
-1
ios/Classes/PermissionHandlerEnums.h
+0
-1
ios/Classes/strategies/LocationPermissionStrategy.m
+0
-5
ios/Classes/strategies/SensorPermissionStrategy.m
+1
-6
lib/src/permission_enums.dart
+8
-13
No files found.
README.md
View file @
52d2bc4b
# Flutter Permission handler Plugin
[

](https://pub.dartlang.org/packages/permission_handler)
[

](https://pub.dartlang.org/packages/permission_handler)
[

](https://app.bitrise.io/app/fa4f5d4bf452bcfb)
[

](https://github.com/tenhobi/effective_dart)
A permissions plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
Branch | Build Status
------- | ------------
develop |
[

](https://app.bitrise.io/app/fa4f5d4bf452bcfb)
master |
[

](https://app.bitrise.io/app/fa4f5d4bf452bcfb)
## Features
*
Check if a permission is granted.
...
...
android/src/main/java/com/baseflow/permissionhandler/PermissionHandlerPlugin.java
View file @
52d2bc4b
...
...
@@ -100,15 +100,13 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
//PERMISSION_STATUS
private
static
final
int
PERMISSION_STATUS_DENIED
=
0
;
private
static
final
int
PERMISSION_STATUS_DISABLED
=
1
;
private
static
final
int
PERMISSION_STATUS_GRANTED
=
2
;
private
static
final
int
PERMISSION_STATUS_RESTRICTED
=
3
;
private
static
final
int
PERMISSION_STATUS_UNKNOWN
=
4
;
private
static
final
int
PERMISSION_STATUS_NEWER_ASK_AGAIN
=
5
;
private
static
final
int
PERMISSION_STATUS_GRANTED
=
1
;
private
static
final
int
PERMISSION_STATUS_RESTRICTED
=
2
;
private
static
final
int
PERMISSION_STATUS_UNKNOWN
=
3
;
private
static
final
int
PERMISSION_STATUS_NEWER_ASK_AGAIN
=
4
;
@Retention
(
RetentionPolicy
.
SOURCE
)
@IntDef
({
PERMISSION_STATUS_DENIED
,
PERMISSION_STATUS_DISABLED
,
PERMISSION_STATUS_GRANTED
,
PERMISSION_STATUS_RESTRICTED
,
PERMISSION_STATUS_UNKNOWN
,
...
...
@@ -318,11 +316,6 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
}
}
if
(
permission
==
PERMISSION_GROUP_LOCATION
||
permission
==
PERMISSION_GROUP_LOCATION_ALWAYS
||
permission
==
PERMISSION_GROUP_LOCATION_WHEN_IN_USE
)
{
if
(!
isLocationServiceEnabled
(
context
))
{
return
PERMISSION_STATUS_DISABLED
;
}
}
return
PERMISSION_STATUS_GRANTED
;
}
...
...
@@ -474,13 +467,13 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
mRequestResults
.
put
(
PERMISSION_GROUP_SPEECH
,
toPermissionStatus
(
permission
,
result
));
}
}
else
if
(
permission
==
PERMISSION_GROUP_LOCATION_ALWAYS
)
{
@PermissionStatus
int
permissionStatus
=
determineActualLocat
ionStatus
(
permission
,
result
);
@PermissionStatus
int
permissionStatus
=
toPermiss
ionStatus
(
permission
,
result
);
if
(!
mRequestResults
.
containsKey
(
PERMISSION_GROUP_LOCATION_ALWAYS
))
{
mRequestResults
.
put
(
PERMISSION_GROUP_LOCATION_ALWAYS
,
permissionStatus
);
}
}
else
if
(
permission
==
PERMISSION_GROUP_LOCATION
)
{
@PermissionStatus
int
permissionStatus
=
determineActualLocat
ionStatus
(
permission
,
result
);
@PermissionStatus
int
permissionStatus
=
toPermiss
ionStatus
(
permission
,
result
);
if
(
VERSION
.
SDK_INT
<
VERSION_CODES
.
Q
)
{
if
(!
mRequestResults
.
containsKey
(
PERMISSION_GROUP_LOCATION_ALWAYS
))
{
...
...
@@ -503,23 +496,6 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
processResult
();
}
/**
* Crosschecks a permission grant result with the location service availability.
*
* @param grantResult Grant Result as received from the Android system.
*/
@PermissionStatus
private
int
determineActualLocationStatus
(
@PermissionGroup
int
permission
,
int
grantResult
)
{
final
Context
context
=
mRegistrar
.
activity
()
==
null
?
mRegistrar
.
activeContext
()
:
mRegistrar
.
activity
();
final
boolean
isLocationServiceEnabled
=
context
!=
null
&&
isLocationServiceEnabled
(
context
);
@PermissionStatus
int
permissionStatus
=
toPermissionStatus
(
permission
,
grantResult
);
if
(
permissionStatus
==
PERMISSION_STATUS_GRANTED
&&
!
isLocationServiceEnabled
)
{
permissionStatus
=
PERMISSION_STATUS_DISABLED
;
}
return
permissionStatus
;
}
private
void
handleIgnoreBatteryOptimizationsRequest
(
boolean
granted
)
{
if
(
mResult
==
null
)
{
return
;
...
...
example/ios/Runner.xcodeproj/project.pbxproj
View file @
52d2bc4b
...
...
@@ -241,7 +241,7 @@
);
inputPaths
=
(
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh"
,
"${PODS_ROOT}/../.symlinks/flutter/ios/Flutter.framework"
,
"${PODS_ROOT}/../.symlinks/flutter/ios
-release
/Flutter.framework"
,
);
name
=
"[CP] Embed Pods Frameworks"
;
outputPaths
=
(
...
...
example/lib/main.dart
View file @
52d2bc4b
...
...
@@ -34,7 +34,7 @@ class MyApp extends StatelessWidget {
permission
!=
PermissionGroup
.
storage
&&
permission
!=
PermissionGroup
.
ignoreBatteryOptimizations
&&
permission
!=
PermissionGroup
.
access
_media_l
ocation
;
permission
!=
PermissionGroup
.
access
MediaL
ocation
;
}
else
{
return
permission
!=
PermissionGroup
.
unknown
&&
permission
!=
PermissionGroup
.
mediaLibrary
&&
...
...
ios/Classes/PermissionHandlerEnums.h
View file @
52d2bc4b
...
...
@@ -105,7 +105,6 @@ typedef NS_ENUM(int, PermissionGroup) {
typedef
NS_ENUM
(
int
,
PermissionStatus
)
{
PermissionStatusDenied
=
0
,
PermissionStatusDisabled
,
PermissionStatusGranted
,
PermissionStatusRestricted
,
PermissionStatusUnknown
,
...
...
ios/Classes/strategies/LocationPermissionStrategy.m
View file @
52d2bc4b
...
...
@@ -96,11 +96,6 @@
PermissionStatus
status
=
[
LocationPermissionStrategy
determinePermissionStatus
:
permission
authorizationStatus
:
authorizationStatus
];
if
((
status
==
PermissionStatusGranted
||
status
==
PermissionStatusDenied
)
&&
!
[
CLLocationManager
locationServicesEnabled
])
{
return
PermissionStatusDisabled
;
}
return
status
;
}
...
...
ios/Classes/strategies/SensorPermissionStrategy.m
View file @
52d2bc4b
...
...
@@ -69,12 +69,7 @@
permissionStatus
=
PermissionStatusGranted
;
}
if
((
permissionStatus
==
PermissionStatusGranted
||
permissionStatus
==
PermissionStatusDenied
)
&&
!
[
CMMotionActivityManager
isActivityAvailable
])
{
return
PermissionStatusDisabled
;
}
else
{
return
permissionStatus
;
}
return
permissionStatus
;
}
return
PermissionStatusUnknown
;
...
...
lib/src/permission_enums.dart
View file @
52d2bc4b
...
...
@@ -8,28 +8,24 @@ class PermissionStatus {
/// Permission to access the requested feature is denied by the user.
static
const
PermissionStatus
denied
=
PermissionStatus
.
_
(
0
);
/// The feature is disabled (or not available) on the device.
static
const
PermissionStatus
disabled
=
PermissionStatus
.
_
(
1
);
/// Permission to access the requested feature is granted by the user.
static
const
PermissionStatus
granted
=
PermissionStatus
.
_
(
2
);
static
const
PermissionStatus
granted
=
PermissionStatus
.
_
(
1
);
/// Permission to access the requested feature is denied by the OS (only on
/// iOS). The user cannot change this app's status, possibly due to active
/// restrictions such as parental controls being in place.
static
const
PermissionStatus
restricted
=
PermissionStatus
.
_
(
3
);
static
const
PermissionStatus
restricted
=
PermissionStatus
.
_
(
2
);
/// Permission is in an unknown state
static
const
PermissionStatus
unknown
=
PermissionStatus
.
_
(
4
);
static
const
PermissionStatus
unknown
=
PermissionStatus
.
_
(
3
);
/// Permission to access the requested feature is denied by the user and
/// never show selected (only on Android).
static
const
PermissionStatus
neverAskAgain
=
PermissionStatus
.
_
(
5
);
static
const
PermissionStatus
neverAskAgain
=
PermissionStatus
.
_
(
4
);
/// Returns a list of all possible [PermissionStatus] values.
static
const
List
<
PermissionStatus
>
values
=
<
PermissionStatus
>[
denied
,
disabled
,
granted
,
restricted
,
unknown
,
...
...
@@ -38,7 +34,6 @@ class PermissionStatus {
static
const
List
<
String
>
_names
=
<
String
>[
'denied'
,
'disabled'
,
'granted'
,
'restricted'
,
'unknown'
,
...
...
@@ -169,12 +164,12 @@ class PermissionGroup {
/// Android: Allows an application to access any geographic locations
/// persisted in the user's shared collection.
static
const
PermissionGroup
access
_media_l
ocation
=
PermissionGroup
.
_
(
17
);
static
const
PermissionGroup
access
MediaL
ocation
=
PermissionGroup
.
_
(
17
);
/// When running on Android Q and above: Activity Recognition
/// When running on Android < Q: Nothing
/// iOS: Nothing
static
const
PermissionGroup
activity
_r
ecognition
=
PermissionGroup
.
_
(
18
);
static
const
PermissionGroup
activity
R
ecognition
=
PermissionGroup
.
_
(
18
);
/// The unknown permission only used for return type, never requested
static
const
PermissionGroup
unknown
=
PermissionGroup
.
_
(
19
);
...
...
@@ -198,8 +193,8 @@ class PermissionGroup {
storage
,
ignoreBatteryOptimizations
,
notification
,
access
_media_l
ocation
,
activity
_r
ecognition
,
access
MediaL
ocation
,
activity
R
ecognition
,
unknown
,
];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment