Ионный 5 конденсатор 3 sqlite.requestPermission() не показывает диалоговое окно

#android #ionic-framework #capacitor

Вопрос:

Я пытаюсь использовать CapacitorSQLite с конденсатором 3. Когда я вызываю SQLite.requestPermission (), в нем не отображается диалоговое окно с запросом разрешения, и код, похоже, никогда не возвращается с этого вызова, поскольку я вижу журналы до этого вызова, но не после.

код выглядит так

 async init(): Promise<void> {
    if (this.platform.is('android')) {
      try {
        const sqlite:any = CapacitorSQLite;
        console.log('setting permission handler');
          this.handlerPermissions = sqlite.addListener(
              'androidPermissionsRequest', async (data:any) => { 
              if (data.permissionGranted === 1) {
                console.log('Perm granted');
                this.setupDatabase();
              } else {
                console.log("Permission not granted");
              }      
          });
          console.log('REQUESTING PERMS');
        await sqlite.requestPermissions();
        
      } catch (e) {
        console.log('error on perm req',e);
        const alert = await this.alertCtrl.create({
          header: 'No DB access',
          message: e.message,
          buttons: ['OK']
        });
        await alert.present();
      }
    } else {
      console.log('not running on android platform');
      const alert = await this.alertCtrl.create({
        header: 'Not android',
        message: this.platform.platforms()[0],
        buttons: ['OK']
      });
      await alert.present();
      this.setupDatabase();
    }
  }
 

вы можете просмотреть следующие журналы

«настройка обработчика разрешений» «ЗАПРОС ЗАВИВКИ»

но я также ожидаю одного из следующих

«Пермь предоставлена» «Разрешение не предоставлено» «ошибка в запросе на пермь»

вот AndroidManifest.xml

 <?xml version='1.0' encoding='utf-8'?>
<manifest package="io.ionic.starter" xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:label="@string/title_activity_main" android:launchMode="singleTask" android:name="io.ionic.starter.MainActivity" android:theme="@style/AppTheme.NoActionBarLaunch">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <provider android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true" android:name="androidx.core.content.FileProvider">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />
        </provider>
    </application>
    <uses-permission android:name="android.permission.INTERNET" />
    
</manifest>
 

Я что-нибудь упускаю? В документе говорится, что у плагина будет разрешение пользователя, которое необходимо добавить, но для sqlite его не видно.

Большое спасибо

Комментарии:

1. Какой плагин вы используете? Я думал, что SQLite не нуждается в каких-либо запросах на получение разрешений.

2. Я использую конденсатор-сообщество-sqlite github.com/capacitor-community/sqlite

3. По крайней мере, последняя версия этого плагина не addListener работает. В любом случае, вы должны настроить разрешение только в Manifest файле, если это необходимо.

4. Да, вы правы. В версии v3 передача запроса не требуется. Он отлично создает базу данных и соединение. Однако при попытке чтения данных он выдает сообщение об ошибке, которое уже существует (но если я проверю isconnection, то оно вернет false). Есть идеи, как следует открывать и управлять подключениями?

Ответ №1:

Вам не нужны специальные разрешения для этого плагина. Проверьте документацию для примеров того, как использовать этот плагин в Angular, React или Vue, в зависимости от того, что вам нужно.