Flutter应用程序不会在发布模式下请求存储许可

奥卡(Omkar Tralsawala)

我正在使用permission_handler程序包来请求读取许可以存储在我的应用中,以便在调试模式下一切正常,并且当我使用“ flutter run --release”运行代码时,但是当我将代码导出为apk权限对话框不会出现。我不知道我在做什么错,请帮帮我!

这是androidManifest.xml

<manifest xmlns:android =“ http://schemas.android.com/apk/res/android” 
    package =“ com.edithautotech.edithdisplayrelease”> 
    <!-io.flutter.app.FlutterApplication是android.app。
         调用FlutterMain.startInitialization(this)的应用程序在其onCreate方法中。
         在大多数情况下,您可以保持原样,但是如果您想提供
         其他功能,可以
         继承或重新实现FlutterApplication并将自定义类放在此处是可以的。-> 
    
    <!-“存储”组的权限选项-> 
    <uses-permission android:name =“ android.permission.INTERNET” />  
    <uses-permission android:name =“ com.android.vending。帐单”
    <uses-permission android:name =“ android.permission。
    
        android:name =“ io.flutter.app.FlutterApplication” 
        android:label =“ Edith Display” 
        android:icon =“ @ mipmap / ic_launcher”> 
        <activity 
            android:name =“。MainActivity” 
            android:launchMode =“ singleTop” 
            android :theme =“ @ style / LaunchTheme” 
            android:configChanges =“ orientation | keyboardHidden |键盘| screenSize | smallestScreenSize | locale | layoutDirection | fontScale | screenLayout | density | uiMode” 
            android:hardwareAccelerated =“ true”
                 在Android进程开始后。该主题对用户可见 
            android:windowSoftInputMode =”AdjustResize“>
            <!-指定
                 在Flutter UI初始化时立即将Android主题应用于此活动之后,此主题将继续
                 确定Flutter UI背后的Window背景。-> 
            <元数据
              android:name =“ io.flutter.embedding.android.NormalTheme” 
              android:resource =“ @ style / NormalTheme” 
              /> 
            <!-显示一个Android视图,该视图继续显示启动屏幕
                 Drawable,直到Flutter绘制其第一帧,然后此初始
                 屏幕淡出。初始屏幕有助于避免任何视觉冲击
                 Android的启动屏幕末端与
                 Flutter的第一帧绘画之间的差距-> 
            <元数据
              android:name =“ io.flutter.embedding.android.SplashScreenDrawable” 
              android:resource =“ @ drawable / launch_background” 
              /> 
            <intent-filter> 
                <action android:name =“ android.intent。 action.MAIN“ /> 
                <category android:name =” android.intent.category.LAUNCHER“ /> 
            </ intent-filter> 
        </ activity> 
        <!-不要删除下面的元数据。
        <元数据
            android:name =“ flutterEmbedding” 
            android:value =“ 2” /> 
    </ application> 
</ manifest>

这是飞镖代码

import 'package:fluttertoast/fluttertoast.dart';
import 'package:permission_handler/permission_handler.dart';

class HomeScreen extends StatefulWidget {
  static const routeName = "/gallery";
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen>
    with SingleTickerProviderStateMixin {
  PermissionStatus _storageStatus = PermissionStatus.restricted;

  @override
  void initState() {
    super.initState();
    _initPermission();
  }

  void _initPermission() async {
    final PermissionStatus status = await _permission.request();
    setState(() {
      _storageStatus = status;
    });
  }
  void _checkPermission({Function handler}) async {
    switch (_storageStatus) {
      case PermissionStatus.granted:
        handler();
        break;
      case PermissionStatus.denied:
         Fluttertoast.showToast(msg: "Storage permission denied");
        break;
      case PermissionStatus.restricted:
         Fluttertoast.showToast(msg: "Storage permission restricted");
        break;
      case PermissionStatus.permanentlyDenied:
         Fluttertoast.showToast(msg: "Storage permission permanently denied");
        break;
      case PermissionStatus.undetermined:
         Fluttertoast.showToast(msg: "Storage permission undermined");
        break;
    }
    }
Void onUploadButtonClick(){
// showing media from device here
}

  @override
  Widget build(BuildContext context) {
    final ThemeData theme = Theme.of(context);
    return Scaffold(
      appBar: AppBar(
        title: Text(
          widget.restaurantName,
          style: theme.appBarTheme.textTheme.headline1,
        ),),
      body: Container(color: Colors.Green),
floatingActionButton: FloatingActionButton.extended(
              onPressed: () {
                Fluttertoast.showToast(msg: "Upload Pressed");
                _checkPermission(
                  handler: () =>
                      onUploadButtonClick(context, user: widget.user),
                );
              },
              label: Text(
                'Upload',
                style: theme.textTheme.button,
              ),
              icon: Icon(
                Icons.cloud_upload,
                size: 30,
              ),
            )
          );
  }

}
亚历克斯

我很确定我已经解决了这个问题:https : //stackoverflow.com/a/64235930/2025941

我用几种不同的方法解决了它:

  1. 将proguard-rules.pro添加到android / app / proguard-rules.pro
#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
-keep class androidx.lifecycle.** { *; } #https://github.com/flutter/flutter/issues/58479
#https://medium.com/@swav.kulinski/flutter-and-android-obfuscation-8768ac544421
  1. 在应用程序级别build.gradle中将proguard添加到buildTypes
buildTypes {
    release {
        profile {
            matchingFallbacks = ['debug', 'release']
        }
    minifyEnabled true
    useProguard true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    signingConfig signingConfigs.release
    }
}
lintOptions {
    disable 'InvalidPackage'
    checkReleaseBuilds false
}
  1. 您也可以尝试在终端中运行主频道:
flutter channel master
  1. 我还通过导航到SDK管理器-> SDK工具->检查并下载Google Play服务,将android迁移到Android Studio中的AndroidX

  2. 我还确保编译SDK和目标SDK为29;目前,SDK 30的Permission_handler软件包存在问题。

  3. 我还编辑了kotlin主要活动文件:

package yourpackage
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

应用程序不会在调试模式下启动

来自分类Dev

仅在“发行版”模式下,onDeviceReady不会在Cordova Windows 10应用程序中触发

来自分类Dev

Kafka:从主机发布的事件不会在Docker中运行的应用程序使用

来自分类Dev

Firestore不会在不重新加载应用程序的情况下更新SwiftUI网格

来自分类Dev

应用程序不会在recyclerview火力显示数据

来自分类Dev

应用程序在发布模式下崩溃,但在启用僵尸程序后不会崩溃

来自分类Dev

默认的MVC5应用程序不会在浏览器VS Express 2013中以调试模式运行

来自分类Dev

在不使用CallKit的情况下使用PushKit不会在Xcode 11.3上终止应用程序

来自分类Dev

点击应用程序图标不会在应用程序中显示通知

来自分类Dev

点击应用程序图标不会在应用程序中显示通知

来自分类Dev

Summernote不会在Bootstrap模式上发布

来自分类Dev

在发布模式下构建uwp应用程序时出错

来自分类Dev

Cloud Firestore 在 APK 发布模式下使应用程序崩溃

来自分类Dev

即使扩展了应用程序图标,共享扩展程序的应用程序图标也不会在设备中更新

来自分类Dev

Xcode不会在模拟器上运行该应用程序。(应用程序意外退出)

来自分类Dev

Android.com的基本应用程序不会在应用程序中显示DisplayMessageActivity

来自分类Dev

Spring-boot应用程序不会在Docker内部启动时启动

来自分类Dev

rCharts不会在闪亮的应用程序中渲染图

来自分类Dev

ffmpeg不会在我的项目中构建,在示例应用程序中可以正常工作

来自分类Dev

.NET Winforms应用程序不会在Windows 8.1上名列前茅

来自分类Dev

字体不会在Production Rails应用程序中呈现

来自分类Dev

类不会在GWT应用程序中序列化

来自分类Dev

元素的大小不会在Kivy中加载应用程序时更新

来自分类Dev

webstorm不会在nodejs应用程序的断点处停止

来自分类Dev

单张地图图块不会在Meteor Cordova应用程序上加载

来自分类Dev

Android应用程序NullPointerException应该不会在哪里发生?

来自分类Dev

为什么静态文件不会在Django Web应用程序中加载?

来自分类Dev

单击Firebase动态链接不会在AppDelegate中调用应用程序(_:继续:restoreHandler :)方法

来自分类Dev

npm install不会在react应用程序中修改package.json

Related 相关文章

  1. 1

    应用程序不会在调试模式下启动

  2. 2

    仅在“发行版”模式下,onDeviceReady不会在Cordova Windows 10应用程序中触发

  3. 3

    Kafka:从主机发布的事件不会在Docker中运行的应用程序使用

  4. 4

    Firestore不会在不重新加载应用程序的情况下更新SwiftUI网格

  5. 5

    应用程序不会在recyclerview火力显示数据

  6. 6

    应用程序在发布模式下崩溃,但在启用僵尸程序后不会崩溃

  7. 7

    默认的MVC5应用程序不会在浏览器VS Express 2013中以调试模式运行

  8. 8

    在不使用CallKit的情况下使用PushKit不会在Xcode 11.3上终止应用程序

  9. 9

    点击应用程序图标不会在应用程序中显示通知

  10. 10

    点击应用程序图标不会在应用程序中显示通知

  11. 11

    Summernote不会在Bootstrap模式上发布

  12. 12

    在发布模式下构建uwp应用程序时出错

  13. 13

    Cloud Firestore 在 APK 发布模式下使应用程序崩溃

  14. 14

    即使扩展了应用程序图标,共享扩展程序的应用程序图标也不会在设备中更新

  15. 15

    Xcode不会在模拟器上运行该应用程序。(应用程序意外退出)

  16. 16

    Android.com的基本应用程序不会在应用程序中显示DisplayMessageActivity

  17. 17

    Spring-boot应用程序不会在Docker内部启动时启动

  18. 18

    rCharts不会在闪亮的应用程序中渲染图

  19. 19

    ffmpeg不会在我的项目中构建,在示例应用程序中可以正常工作

  20. 20

    .NET Winforms应用程序不会在Windows 8.1上名列前茅

  21. 21

    字体不会在Production Rails应用程序中呈现

  22. 22

    类不会在GWT应用程序中序列化

  23. 23

    元素的大小不会在Kivy中加载应用程序时更新

  24. 24

    webstorm不会在nodejs应用程序的断点处停止

  25. 25

    单张地图图块不会在Meteor Cordova应用程序上加载

  26. 26

    Android应用程序NullPointerException应该不会在哪里发生?

  27. 27

    为什么静态文件不会在Django Web应用程序中加载?

  28. 28

    单击Firebase动态链接不会在AppDelegate中调用应用程序(_:继续:restoreHandler :)方法

  29. 29

    npm install不会在react应用程序中修改package.json

热门标签

归档