flutter-permission-handler
flutter-permission-handler copied to clipboard
Permission.ignoreBatteryOptimizations.request() doesn't work.
🐛 Bug Report
Expected behavior
Permission.ignoreBatteryOptimizations.request()
doesn't work.
Reproduction steps
AndroidManifest.xml
- Add permission
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
- Use code
final PermissionStatus permissionStatus = await Permission.ignoreBatteryOptimizations.request();
- Detail log
W/ConnectionTracker(27957): Exception thrown while unbinding
W/ConnectionTracker(27957): java.lang.IllegalArgumentException: Service not registered: lv@13561b0
W/ConnectionTracker(27957): at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1681)
W/ConnectionTracker(27957): at android.app.ContextImpl.unbindService(ContextImpl.java:1854)
W/ConnectionTracker(27957): at android.content.ContextWrapper.unbindService(ContextWrapper.java:703)
W/ConnectionTracker(27957): at ci.f(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (040406-0):1)
W/ConnectionTracker(27957): at ci.d(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (040406-0):2)
W/ConnectionTracker(27957): at lw.E(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (040406-0):9)
W/ConnectionTracker(27957): at lg.a(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (040406-0):3)
W/ConnectionTracker(27957): at eg.run(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (040406-0):3)
W/ConnectionTracker(27957): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
W/ConnectionTracker(27957): at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/ConnectionTracker(27957): at iz.run(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (040406-0):5)
I/zygote64(27957): Do partial code cache collection, code=123KB, data=85KB
I/zygote64(27957): After code cache collection, code=123KB, data=85KB
I/zygote64(27957): Increasing code cache capacity to 512KB
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): Failed to handle method call
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at androidx.fragment.app.FragmentActivity.checkForValidRequestCode(FragmentActivity.java:715)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:660)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at com.baseflow.permissionhandler.PermissionManager.requestPermissions(PermissionManager.java:122)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at com.baseflow.permissionhandler.MethodCallHandlerImpl.onMethodCall(MethodCallHandlerImpl.java:91)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at android.os.MessageQueue.next(MessageQueue.java:379)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at android.os.Looper.loop(Looper.java:144)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at android.app.ActivityThread.main(ActivityThread.java:7555)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469)
E/MethodChannel#flutter.baseflow.com/permissions/methods(27957): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)
E/flutter (27957): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(error, Can only use lower 16 bits for requestCode, null, java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
E/flutter (27957): at androidx.fragment.app.FragmentActivity.checkForValidRequestCode(FragmentActivity.java:715)
E/flutter (27957): at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:660)
E/flutter (27957): at com.baseflow.permissionhandler.PermissionManager.requestPermissions(PermissionManager.java:122)
E/flutter (27957): at com.baseflow.permissionhandler.MethodCallHandlerImpl.onMethodCall(MethodCallHandlerImpl.java:91)
E/flutter (27957): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/flutter (27957): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/flutter (27957): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/flutter (27957): at android.os.MessageQueue.nativePollOnce(Native Method)
E/flutter (27957): at android.os.MessageQueue.next(MessageQueue.java:379)
E/flutter (27957): at android.os.Looper.loop(Looper.java:144)
E/flutter (27957): at android.app.ActivityThread.main(ActivityThread.java:7555)
E/flutter (27957): at java.lang.reflect.Method.invoke(Native Method)
E/flutter (27957): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469)
E/flutter (27957): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)
E/flutter (27957): )
E/flutter (27957): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:582:7)
E/flutter (27957): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:159:18)
E/flutter (27957): <asynchronous suspension>
E/flutter (27957): #2 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:332:12)
E/flutter (27957): #3 MethodChannelPermissionHandler.requestPermissions (package:permission_handler_platform_interface/src/method_channel/method_channel_permission_handler.dart:66:30)
E/flutter (27957): #4 PermissionListActions.request (package:permission_handler/permission_handler.dart:109:16)
E/flutter (27957): #5 PermissionActions.request (package:permission_handler/permission_handler.dart:49:26)
E/flutter (27957): #6 _MoreScreenState.build.<anonymous closure>
Hi, I am using your great package well. Thank you!😇
I request permission, the error below will occur.
I think the error occurred because PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS
of PermissionConstants.java
is greater than 65535.
- Error log
Can only use lower 16 bits for requestCode
E/flutter (27957): at androidx.fragment.app.FragmentActivity.checkForValidRequestCode(FragmentActivity.java:715)
- PermissionConstants.java
static final int PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS = 5672353;
@param requestCode The request code to be returned in {@link Fragment#onActivityResult(int, int, Intent)} when the activity exits. Must be between 0 and 65535 to be considered valid. If given requestCode is greater than 65535, an IllegalArgumentException would be thrown.
Can you tell me if I set it up wrong?😃
### Configuration
**Version:** 5.0.1+1
**Platform:**
- [ ] :iphone: iOS
- [x] :robot: Android
Hi. My team solved this problem as below.
Cause:
My project had an error because MainActivity
was using FlutterFragmentActivity
, not FlutterActivity
.
solve:
Add the code below to android/app/build.gradle
implementation "androidx.fragment:fragment-ktx:1.3.0-beta02"
But I don't think this is a complete solution to compatibility, so I'll keep this issue open. Could you review it later and close it if it's not an issue?
Hi @viiviii, thanks for the extensive bug report! I tried to reproduce the issue you're having but I could not reproduce it.
The steps I took to reproduce:
- Made a new Flutter project, and used the standard Flutter application (incremental counter)
- I added
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
to the AndroidManifest - In the _incrementCounter() method I used the code you provided, which was:
final PermissionStatus permissionStatus = await Permission.ignoreBatteryOptimizations.request();
- Just to be sure I checked if the right permission status was also set by allowing the permission and printing the boolean value of
permissionStatus.IsGranted
which it did.
flutter doctor -v
[√] Flutter (Channel beta, 2.0.0, on Microsoft Windows [Version 10.0.19041.867], locale nl-NL) • Flutter version 2.0.0 at C:\Baseflow\flutter • Framework revision 60bd88df91 (4 weeks ago), 2021-03-03 09:13:17 -0800 • Engine revision 40441def69 • Dart version 2.12.0[√] Android toolchain - develop for Android devices (Android SDK version 30.0.3) • Android SDK at C:\Users\Jan-Derk\AppData\Local\Android\sdk • Platform android-30, build-tools 30.0.3 • Java binary at: C:\Users\Jan-Derk\AppData\Local\JetBrains\Toolbox\apps\AndroidStudio\ch-0\201.7042882\jre\bin\java • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01) • All Android licenses accepted.
[√] Chrome - develop for the web • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[√] Android Studio (version 4.1.0) • Android Studio at C:\Users\Jan-Derk\AppData\Local\JetBrains\Toolbox\apps\AndroidStudio\ch-0\201.7042882 • Flutter plugin can be installed from: https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
[√] IntelliJ IDEA Community Edition (version 2020.2) • IntelliJ at C:\Users\Jan-Derk\AppData\Local\JetBrains\Toolbox\apps\IDEA-C\ch-0\202.7660.26 • Flutter plugin can be installed from: https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: https://plugins.jetbrains.com/plugin/6351-dart
[√] Connected device (3 available) • AOSP on IA Emulator (mobile) • emulator-5556 • android-x86 • Android 9 (API 28) (emulator) • Chrome (web) • chrome • web-javascript • Google Chrome 89.0.4389.90 • Edge (web) • edge • web-javascript • Microsoft Edge 89.0.774.57 ! Device RZ8R10RN1NF is not authorized. You might need to check your device for an authorization dialog.
• No issues found!
I tested it on the Pixel 3 API 28 and API 30 (Android 9 and 11) and on a physical device which was the Samsung S20 Android 11. I used the newest version of the permission_handler plugin (version 6.1.1). Can you please let me know if the issue still occurs by using the newest version of the plugin? Thanks in advance!
Hi @JDDV, Have you tried extending FlutterFragmentActivity as your main activity in android\app\src\main\kotlin\com\example\myapp\MainActivity.kt ?
I mean this piece
class MainActivity : FlutterFragmentActivity() {...}
because FlutterFragmentActivity triggers the problem.
Thank you!
I am closing this issue as there has not been any activity in over 2 years. If you are experiencing this issue, feel free to open a new issue, linking this issue.