Skip to content

Commit 6a3c55c

Browse files
author
wangyongqi
committed
Fix SecurityException when calling canRequestPackageInstalls() without REQUEST_INSTALL_PACKAGES
1 parent d842345 commit 6a3c55c

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

permission_handler_android/android/src/main/java/com/baseflow/permissionhandler/PermissionManager.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,15 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
117117
}
118118
} else if (requestCode == PermissionConstants.PERMISSION_CODE_REQUEST_INSTALL_PACKAGES) {
119119
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
120-
status = activity.getPackageManager().canRequestPackageInstalls()
121-
? PermissionConstants.PERMISSION_STATUS_GRANTED
122-
: PermissionConstants.PERMISSION_STATUS_DENIED;
120+
try {
121+
status = activity.getPackageManager().canRequestPackageInstalls()
122+
? PermissionConstants.PERMISSION_STATUS_GRANTED
123+
: PermissionConstants.PERMISSION_STATUS_DENIED;
124+
} catch (SecurityException e) {
125+
// App has not declared REQUEST_INSTALL_PACKAGES in manifest.
126+
Log.d(PermissionConstants.LOG_TAG, "Cannot call canRequestPackageInstalls: " + e.getMessage());
127+
status = PermissionConstants.PERMISSION_STATUS_DENIED;
128+
}
123129
permission = PermissionConstants.PERMISSION_GROUP_REQUEST_INSTALL_PACKAGES;
124130
} else {
125131
return false;
@@ -532,10 +538,16 @@ private int determinePermissionStatus(final @PermissionConstants.PermissionGroup
532538
permissionStatuses.add(status);
533539
} else if (permission == PermissionConstants.PERMISSION_GROUP_REQUEST_INSTALL_PACKAGES) {
534540
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
535-
int status = context.getPackageManager().canRequestPackageInstalls()
536-
? PermissionConstants.PERMISSION_STATUS_GRANTED
537-
: PermissionConstants.PERMISSION_STATUS_DENIED;
538-
permissionStatuses.add(status);
541+
try {
542+
int status = context.getPackageManager().canRequestPackageInstalls()
543+
? PermissionConstants.PERMISSION_STATUS_GRANTED
544+
: PermissionConstants.PERMISSION_STATUS_DENIED;
545+
permissionStatuses.add(status);
546+
} catch (SecurityException e) {
547+
// App has not declared REQUEST_INSTALL_PACKAGES in manifest.
548+
Log.d(PermissionConstants.LOG_TAG, "Cannot call canRequestPackageInstalls: " + e.getMessage());
549+
permissionStatuses.add(PermissionConstants.PERMISSION_STATUS_DENIED);
550+
}
539551
}
540552
} else if (permission == PermissionConstants.PERMISSION_GROUP_ACCESS_NOTIFICATION_POLICY) {
541553
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Application.NOTIFICATION_SERVICE);

0 commit comments

Comments
 (0)