#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). Есть идеи, как следует открывать и управлять подключениями?