Accès fichier local dans une WebView
Mon application native comprend une WebView, et la WebView charge une page web hors web. Par exemple, le code html est chargé de
http://dongshengcn.com/test.html
Il semble chargé à partir de n'importe quelle page web (au lieu de locaux) ne peut pas charger n'importe quel fichier de périphérique local.
Ma question est:
Est-il possible pour un http://dongsheng.com/test.html chargé d'une webview (dans le cadre de l'application native) d'accéder à un fichier sur le périphérique local?
poster votre code et où vous avez mis le fichier ?
Cela peut être un mécanisme de sécurité. J'ai essayé un file:///mnt/sdcard/some.jpg un lien sur une page web de test, et constaté qu'il ne serait même pas tenter de charger quand on clique sur un appareil android. Cependant, si j'ai appuyé sur le lien et choisis "ouvrir" dans le menu contextuel, puis de référence de l'image en fait serait d'ouvrir. Il a essayé avec un fichier html.
Cela peut être un mécanisme de sécurité. J'ai essayé un file:///mnt/sdcard/some.jpg un lien sur une page web de test, et constaté qu'il ne serait même pas tenter de charger quand on clique sur un appareil android. Cependant, si j'ai appuyé sur le lien et choisis "ouvrir" dans le menu contextuel, puis de référence de l'image en fait serait d'ouvrir. Il a essayé avec un fichier html.
OriginalL'auteur dongshengcn | 2012-05-16
Vous devez vous connecter pour publier un commentaire.
Voici un couple de choses à essayer:
À l'utilisation de fichiers en local, vous devez les placer dans votre dossier des actifs et appelez-les à l'aide des Url de la forme " fichier:///android_asset/. Par exemple, si vous ajoutez mypage.html dans votre dossier des actifs, alors vous pouvez l'invoquer dans le webview avec file:///android_asset/mypage.html.
Assurez-vous que vous disposez des webview autorisations dans votre Manifeste. Pour la webview pour fonctionner correctement, vous devez:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Prendre un coup d'oeil à l'application sur Github, qui, comme un bonus corrige également quelques bugs avec la webview en Nid d'abeille et de l'ICS. C'est un exemple complet sur la façon d'utiliser le webview avec les fichiers locaux:
https://github.com/bricolsoftconsulting/WebViewIssue17535FixDemo
EDIT: Addendum après la question de la clarification:
Oui, il est possible de charger une page locale sur le web, mais vous devez utiliser une astuce pour contourner le navigateur mesures de sécurité.
Remplacer le fichier://android_asset/portion de l'Url avec un modèle personnalisé (par ex. file///android_asset/mypage.html devient myscheme:///mypage.html), et le lieu de ces modèle personnalisé Url de votre page. Mettre en œuvre WebViewClient de
shouldOverrideUrlLoading
, vérifier si l'URL commence avec le modèle personnalisé et si donc rediriger vers la page locale à l'aide de webview.loadUrl.Veuillez voir ma réponse révisée ci-dessus.
Pourquoi auriez-vous besoin de la
..._LOCATION
les autorisations de l'utilisateur?Ces autorisations sont là pour s'assurer que si une demande d'emplacement est livré par le biais de votre code HTML, alors il peut être traité. Vous ne pouvez pas besoin de cela.
Le Point 2 n'est pas pertinent. Ce type d'emplacement n'a rien à voir avec les emplacements des fichiers: il s'agit de l'emplacement géographique.
OriginalL'auteur Theo