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
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
17 additions
and
62 deletions
+17
-62
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
+0
-5
lib/src/permission_enums.dart
+8
-13
No files found.
README.md
View file @
52d2bc4b
# Flutter Permission handler Plugin
# 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.
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
## Features
*
Check if a permission is granted.
*
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 {
...
@@ -100,15 +100,13 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
//PERMISSION_STATUS
//PERMISSION_STATUS
private
static
final
int
PERMISSION_STATUS_DENIED
=
0
;
private
static
final
int
PERMISSION_STATUS_DENIED
=
0
;
private
static
final
int
PERMISSION_STATUS_DISABLED
=
1
;
private
static
final
int
PERMISSION_STATUS_GRANTED
=
1
;
private
static
final
int
PERMISSION_STATUS_GRANTED
=
2
;
private
static
final
int
PERMISSION_STATUS_RESTRICTED
=
2
;
private
static
final
int
PERMISSION_STATUS_RESTRICTED
=
3
;
private
static
final
int
PERMISSION_STATUS_UNKNOWN
=
3
;
private
static
final
int
PERMISSION_STATUS_UNKNOWN
=
4
;
private
static
final
int
PERMISSION_STATUS_NEWER_ASK_AGAIN
=
4
;
private
static
final
int
PERMISSION_STATUS_NEWER_ASK_AGAIN
=
5
;
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@IntDef
({
@IntDef
({
PERMISSION_STATUS_DENIED
,
PERMISSION_STATUS_DENIED
,
PERMISSION_STATUS_DISABLED
,
PERMISSION_STATUS_GRANTED
,
PERMISSION_STATUS_GRANTED
,
PERMISSION_STATUS_RESTRICTED
,
PERMISSION_STATUS_RESTRICTED
,
PERMISSION_STATUS_UNKNOWN
,
PERMISSION_STATUS_UNKNOWN
,
...
@@ -318,11 +316,6 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
...
@@ -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
;
return
PERMISSION_STATUS_GRANTED
;
}
}
...
@@ -474,13 +467,13 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
...
@@ -474,13 +467,13 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
mRequestResults
.
put
(
PERMISSION_GROUP_SPEECH
,
toPermissionStatus
(
permission
,
result
));
mRequestResults
.
put
(
PERMISSION_GROUP_SPEECH
,
toPermissionStatus
(
permission
,
result
));
}
}
}
else
if
(
permission
==
PERMISSION_GROUP_LOCATION_ALWAYS
)
{
}
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
))
{
if
(!
mRequestResults
.
containsKey
(
PERMISSION_GROUP_LOCATION_ALWAYS
))
{
mRequestResults
.
put
(
PERMISSION_GROUP_LOCATION_ALWAYS
,
permissionStatus
);
mRequestResults
.
put
(
PERMISSION_GROUP_LOCATION_ALWAYS
,
permissionStatus
);
}
}
}
else
if
(
permission
==
PERMISSION_GROUP_LOCATION
)
{
}
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
(
VERSION
.
SDK_INT
<
VERSION_CODES
.
Q
)
{
if
(!
mRequestResults
.
containsKey
(
PERMISSION_GROUP_LOCATION_ALWAYS
))
{
if
(!
mRequestResults
.
containsKey
(
PERMISSION_GROUP_LOCATION_ALWAYS
))
{
...
@@ -503,23 +496,6 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
...
@@ -503,23 +496,6 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
processResult
();
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
)
{
private
void
handleIgnoreBatteryOptimizationsRequest
(
boolean
granted
)
{
if
(
mResult
==
null
)
{
if
(
mResult
==
null
)
{
return
;
return
;
...
...
example/ios/Runner.xcodeproj/project.pbxproj
View file @
52d2bc4b
...
@@ -241,7 +241,7 @@
...
@@ -241,7 +241,7 @@
);
);
inputPaths
=
(
inputPaths
=
(
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh"
,
"${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"
;
name
=
"[CP] Embed Pods Frameworks"
;
outputPaths
=
(
outputPaths
=
(
...
...
example/lib/main.dart
View file @
52d2bc4b
...
@@ -34,7 +34,7 @@ class MyApp extends StatelessWidget {
...
@@ -34,7 +34,7 @@ class MyApp extends StatelessWidget {
permission
!=
PermissionGroup
.
storage
&&
permission
!=
PermissionGroup
.
storage
&&
permission
!=
permission
!=
PermissionGroup
.
ignoreBatteryOptimizations
&&
PermissionGroup
.
ignoreBatteryOptimizations
&&
permission
!=
PermissionGroup
.
access
_media_l
ocation
;
permission
!=
PermissionGroup
.
access
MediaL
ocation
;
}
else
{
}
else
{
return
permission
!=
PermissionGroup
.
unknown
&&
return
permission
!=
PermissionGroup
.
unknown
&&
permission
!=
PermissionGroup
.
mediaLibrary
&&
permission
!=
PermissionGroup
.
mediaLibrary
&&
...
...
ios/Classes/PermissionHandlerEnums.h
View file @
52d2bc4b
...
@@ -105,7 +105,6 @@ typedef NS_ENUM(int, PermissionGroup) {
...
@@ -105,7 +105,6 @@ typedef NS_ENUM(int, PermissionGroup) {
typedef
NS_ENUM
(
int
,
PermissionStatus
)
{
typedef
NS_ENUM
(
int
,
PermissionStatus
)
{
PermissionStatusDenied
=
0
,
PermissionStatusDenied
=
0
,
PermissionStatusDisabled
,
PermissionStatusGranted
,
PermissionStatusGranted
,
PermissionStatusRestricted
,
PermissionStatusRestricted
,
PermissionStatusUnknown
,
PermissionStatusUnknown
,
...
...
ios/Classes/strategies/LocationPermissionStrategy.m
View file @
52d2bc4b
...
@@ -96,11 +96,6 @@
...
@@ -96,11 +96,6 @@
PermissionStatus
status
=
[
LocationPermissionStrategy
PermissionStatus
status
=
[
LocationPermissionStrategy
determinePermissionStatus
:
permission
authorizationStatus
:
authorizationStatus
];
determinePermissionStatus
:
permission
authorizationStatus
:
authorizationStatus
];
if
((
status
==
PermissionStatusGranted
||
status
==
PermissionStatusDenied
)
&&
!
[
CLLocationManager
locationServicesEnabled
])
{
return
PermissionStatusDisabled
;
}
return
status
;
return
status
;
}
}
...
...
ios/Classes/strategies/SensorPermissionStrategy.m
View file @
52d2bc4b
...
@@ -69,13 +69,8 @@
...
@@ -69,13 +69,8 @@
permissionStatus
=
PermissionStatusGranted
;
permissionStatus
=
PermissionStatusGranted
;
}
}
if
((
permissionStatus
==
PermissionStatusGranted
||
permissionStatus
==
PermissionStatusDenied
)
&&
!
[
CMMotionActivityManager
isActivityAvailable
])
{
return
PermissionStatusDisabled
;
}
else
{
return
permissionStatus
;
return
permissionStatus
;
}
}
}
return
PermissionStatusUnknown
;
return
PermissionStatusUnknown
;
}
}
...
...
lib/src/permission_enums.dart
View file @
52d2bc4b
...
@@ -8,28 +8,24 @@ class PermissionStatus {
...
@@ -8,28 +8,24 @@ class PermissionStatus {
/// Permission to access the requested feature is denied by the user.
/// Permission to access the requested feature is denied by the user.
static
const
PermissionStatus
denied
=
PermissionStatus
.
_
(
0
);
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.
/// 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
/// 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
/// iOS). The user cannot change this app's status, possibly due to active
/// restrictions such as parental controls being in place.
/// 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
/// 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
/// Permission to access the requested feature is denied by the user and
/// never show selected (only on Android).
/// 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.
/// Returns a list of all possible [PermissionStatus] values.
static
const
List
<
PermissionStatus
>
values
=
<
PermissionStatus
>[
static
const
List
<
PermissionStatus
>
values
=
<
PermissionStatus
>[
denied
,
denied
,
disabled
,
granted
,
granted
,
restricted
,
restricted
,
unknown
,
unknown
,
...
@@ -38,7 +34,6 @@ class PermissionStatus {
...
@@ -38,7 +34,6 @@ class PermissionStatus {
static
const
List
<
String
>
_names
=
<
String
>[
static
const
List
<
String
>
_names
=
<
String
>[
'denied'
,
'denied'
,
'disabled'
,
'granted'
,
'granted'
,
'restricted'
,
'restricted'
,
'unknown'
,
'unknown'
,
...
@@ -169,12 +164,12 @@ class PermissionGroup {
...
@@ -169,12 +164,12 @@ class PermissionGroup {
/// Android: Allows an application to access any geographic locations
/// Android: Allows an application to access any geographic locations
/// persisted in the user's shared collection.
/// 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 and above: Activity Recognition
/// When running on Android < Q: Nothing
/// When running on Android < Q: Nothing
/// iOS: 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
/// The unknown permission only used for return type, never requested
static
const
PermissionGroup
unknown
=
PermissionGroup
.
_
(
19
);
static
const
PermissionGroup
unknown
=
PermissionGroup
.
_
(
19
);
...
@@ -198,8 +193,8 @@ class PermissionGroup {
...
@@ -198,8 +193,8 @@ class PermissionGroup {
storage
,
storage
,
ignoreBatteryOptimizations
,
ignoreBatteryOptimizations
,
notification
,
notification
,
access
_media_l
ocation
,
access
MediaL
ocation
,
activity
_r
ecognition
,
activity
R
ecognition
,
unknown
,
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