PDF文件未在颤动的android发行版中打开[关闭]

Posted

技术标签:

【中文标题】PDF文件未在颤动的android发行版中打开[关闭]【英文标题】:PDF file not opening in release version of android in flutter [closed] 【发布时间】:2020-09-19 14:29:21 【问题描述】:

android Studio Emulator 中,pdf 文件正在打开,但是当我发布其 .apk 文件并将其安装到手机上时,pdf 文件无法打开。我使用flutter_pdfview包来加载pdf文件。

这是显示页面的位置。

import 'package:darpandentalhome/services/api_for_report.dart';
import 'package:darpandentalhome/shared/loading.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_pdfview/flutter_pdfview.dart';
import 'package:google_fonts/google_fonts.dart';

class Report extends StatefulWidget 

  final String url;

  Report(this.url);

  @override
  _ReportState createState() => _ReportState();


class _ReportState extends State<Report> 

  String path;

  @override
  void initState() 
    // TODO: implement initState
    super.initState();
    ApiService(pdfURL: widget.url).loadPDF().then((value)
      setState(() 
        path=value;
      );
    );
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        elevation: 0,
        centerTitle: true,
        title: Text(
            'Report',
          style: GoogleFonts.rubik(
            textStyle: TextStyle(
              color: Colors.black,
              fontWeight: FontWeight.w500
            )
          ),
        ),
        leading: IconButton(
            icon: Icon(Icons.arrow_back_ios,color: Colors.black,),
          onPressed: () 
              Navigator.pop(context);
          ,
        ),
        backgroundColor: Color(0xfff9f9f9),
      ),
      backgroundColor: Color(0xfff9f9f9),
      body: path != null ? Container(
        child: PDFView(
          filePath: path,
        ),
      ) : Loading(),
      floatingActionButton: IconButton(
        icon: Icon(Icons.refresh,size: 30,),
        onPressed: () 
          setState(() 
            path = null;
            ApiService(pdfURL: widget.url).loadPDF().then((value)
              setState(() 
                path=value;
              );
            );
          );
        ,
      ),
    );
  

这是用于从 HTTP URL 获取 pdf 文件的 HTTP API 服务。

import 'dart:io';

import 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';

class ApiService

  final String pdfURL;

  ApiService(this.pdfURL);

  Future<String> loadPDF() async 
    var response = await http.get(pdfURL);
    var dir = await getExternalStorageDirectory();
    File file = File(dir.path + "/data.pdf");
    await file.writeAsBytes(response.bodyBytes, flush: true);
    return file.path;
  


我认为这是手机的权限问题,然后我在 AndroidManifest 文件中使用了存储权限,然后在我的手机上手动允许了此权限,但它也不起作用。 这里有什么问题?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

【问题讨论】:

【参考方案1】:

这是因为android版本之间的差异 如果您的 android 版本是 29,请在清单中使用此代码 android:requestLegacyExternalStorage="true"

【讨论】:

您建议的代码没有选项。当我复制/粘贴您的代码时,它会显示未知属性。【参考方案2】:

以下是修复的步骤:

    1. Add proguard-rules.pro in android/app folder file if its not already there

    2. Inside of the proguard-rules.pro file put this:
        -keep class com.shockwave.**
        -keepclassmembers class com.shockwave.**  *; 
        
    3.In app/build.gradle add this:

       buildTypes
             release
                shrinkResources true
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

【讨论】:

【参考方案3】:

由于 http api 需要从 Internet 获取数据,因此在授予应用程序 Internet 权限后,此问题已解决。

【讨论】:

以上是关于PDF文件未在颤动的android发行版中打开[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Advance_pdf_viewer 在发行版中不起作用

导航抽屉未在颤动中从 APPBar 小部件打开

SVG raw 未在颤动中显示文本

print() 语句未在 Android Studio 中的颤动 iOS 应用程序中打印到控制台

适用于 Android 的 Android 地图 SDK 在发行版中不工作

大型 pdf 文件未在具有 aws 签名 url 的浏览器中打开