Flutter - 在 flutter_reactive_ble 库的 AndroidManifest 文件中放置权限的确切位置

问题描述 投票:0回答:1

我在管理如何在适用于 Android 的 Flutter 移动应用程序中运行 flutter_reactive_ble 库 的示例/示例代码时遇到问题。我试过几个例子,没有运气。

我发现错误的主要原因是缺少提供的蓝牙权限。 flutter_reactive_ble 库的文档显示我们需要将两部分代码放入 Android Manifest 文件中...

一个:

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />

二:

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" 
                     tools:remove="android:usesPermissionFlags"
                     tools:targetApi="s" />

这里是这个库的文档:https://pub.dev/packages/flutter_reactive_ble

我不知道把它们放在哪里,尤其是第二部分。没有他们,提供的代码将无法工作。

另一个问题是在 Flutter 应用程序中有三个清单文件,在三个不同的目录中:

  • 主要
  • 简介
  • 调试

那些文件不同,我应该编辑哪个?

--

整个清单文件(来自主目录):

<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" tools:remove="android:usesPermissionFlags" tools:targetApi="s" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />

    <application
        android:label="fl_ble_3"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>
android flutter manifest
1个回答
0
投票

Android Manifest 的位置在里面

[Project_Root]\android\app\src\main\AndroidManifest.xml
你的清单看起来像这样:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.blockchaincommodities.hippo_wallet"
    xmlns:tools="http://schemas.android.com/tools">
   
   <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
   <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />


   <application>
   ...
   <\application>
<\manifest>

如文档中所述,如果您使用

BLUETOOTH_SCAN
来确定位置,则必须修改权限并且您的清单将看起来像这样:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.blockchaincommodities.hippo_wallet"
    xmlns:tools="http://schemas.android.com/tools">
   
   <uses-permission android:name="android.permission.BLUETOOTH_SCAN" 
                     tools:remove="android:usesPermissionFlags"
                     tools:targetApi="s" />
   <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />


   <application>
   ...
   <\application>
<\manifest>

© www.soinside.com 2019 - 2024. All rights reserved.