2017-10-13 9 views
1

J'ai construit une application Cordova (cordova -v 7.0.1, cordova-android 6.1.0).Le localStorage de Cordova WebView n'est pas accessible sur Android 7?

Cela inclut le démarrage automatique. Ce qui signifie que lorsque DEFINED, dans l'application, les appareils Bluetooth sont connectés à, l'application va commencer.

La façon dont cela a été fait:

  1. Enregistrer bluetooths adresse dans localStorage (file__0.localstorage) .// côté JS
  2. BroadcastReceiver, sur bluetooth.device.action.ACL_CONNECTED. Récupérer localStorage (file__0.localstorage) si l'appareil de l'appareil branché dans notre LocalStorage Démarrer app.// côté natif

Cela a été compilé à la fin de 2016. Et cela a fonctionné jusqu'à maintenant, même avec les nouveaux logiciels sage, dispositifs.

J'ai décidé de faire quelques mises à jour d'applications, et maintenant il a cessé de fonctionner. Après un débogage, j'ai vu que je ne pouvais pas lire file__0.localstorage. C'est ce que j'ai pour le moment:

File dataDir = new File(context.getFilesDir().getParent()); 
    File appWebViewFilesDir = new File(dataDir, "app_webview/Local Storage/file__0.localstorage"); 

    Log.d(TAG, "Absolute path is " + appWebViewFilesDir.getAbsolutePath()); 
    //Result (rooted phone): path is given. 
    //Result (UNrooted phone): path is given. 

    Log.d(TAG, "Fine name is " + appWebViewFilesDir.getName()); 
    //Result (rooted phone): name is given. 
    //Result (UNrooted phone): name is given. 

    Log.d(TAG, "Is file Readable " + appWebViewFilesDir.canRead()); 
    //Result (rooted phone): true. 
    //Result (UNrooted phone): false. 

    Log.d(TAG, "Tring to set file to readable? " +appWebViewFilesDir.setReadable(true)); 
    //Result (rooted phone): true. 
    //Result (UNrooted phone): false. 

    Log.d(TAG, "Tring to set file to readable for all users? " + appWebViewFilesDir.setReadable(true, true)); 
    //Result (rooted phone): true. 
    //Result (UNrooted phone): false. 

    Log.d(TAG, "Is file Readable " + appWebViewFilesDir.canRead()); 
    //Result (rooted phone): true. 
    //Result (UNrooted phone): false. 

    Log.d(TAG, "Does this file exist " + appWebViewFilesDir.exists()); 
    //Result (rooted phone): true. 
    //Result (UNrooted phone): false. 

Des idées quand est-ce que cela a changé?

Des idées comment puis-je rendre localStorage file__0.localstorage accessible sans avoir à rooter les périphériques?

Est-il possible de résoudre ce problème sans avoir à implémenter un nouveau système de stockage de données?

P.S. La persistance des données n'est pas si importante dans ce cas.

Répondre

0

Ce n'est pas vraiment un problème Android 7. Le localstorage semble dépendre du webview. Et le webview peut être mis à jour indépendamment.

Est-il possible de résoudre ce problème sans avoir à implémenter un nouveau système de stockage de données ?

Oui. file__1.localstorage était un db SQLLite. Maintenant, dans le même dossier, app_webview/Local Storage, vous devriez trouver un autre dossier, leveldb. LevelDB est une base de données créée par google. Vous pouvez utiliser un wrapper Java, leveldb-android par exemple, pour y accéder. Et puis, vous devriez utiliser l'itérateur pour itérer sur les entrées, en cherchant celui dont vous avez besoin. L'appel get() a renvoyé null dans mon cas.