2010-10-14 6 views
0

Comment créer une activité prenant en charge certains types de fichiers cliqués dans le navigateur Web?Comment lire les fichiers cliqués dans le navigateur Web Android?

Voici ce que j'ai essayé:

AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="net.sf.asap" android:versionCode="212" android:versionName="2.1.2"> 
    <application android:label="@string/app_name" android:icon="@drawable/icon"> 
     <activity android:name=".FileSelector" android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".Player" android:label="@string/playing"> 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="file" android:host="*" /> 
       <data android:scheme="http" android:host="*" /> 
       <data android:scheme="https" android:host="*" /> 
       <data android:pathPattern=".*\\.sap" /> 
       <data android:pathPattern=".*\\.cmc" /> 
       <data android:pathPattern=".*\\.cm3" /> 
       <data android:pathPattern=".*\\.cmr" /> 
       <data android:pathPattern=".*\\.cms" /> 
       <data android:pathPattern=".*\\.dmc" /> 
       <data android:pathPattern=".*\\.dlt" /> 
       <data android:pathPattern=".*\\.mpt" /> 
       <data android:pathPattern=".*\\.mpd" /> 
       <data android:pathPattern=".*\\.rmt" /> 
       <data android:pathPattern=".*\\.tmc" /> 
       <data android:pathPattern=".*\\.tm8" /> 
       <data android:pathPattern=".*\\.tm2" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Fragment de Player.java:

Uri uri = getIntent().getData(); 
InputStream is = getContentResolver().openInputStream(uri); 

Quand j'entrer une URL dans le navigateur (Android 1.6) Je reçois:

E/AndroidRuntime(12026): Caused by: java.lang.RuntimeException: java.io.FileNotFoundException: No content provider: http://asap.sourceforge.net/X_Ray_2.sap 
E/AndroidRuntime(12026): at net.sf.asap.Player.onCreate(Player.java:109) 
E/AndroidRuntime(12026): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
E/AndroidRuntime(12026): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 

Répondre

2

Tout d'abord, ce qui suit est une idée particulièrement mauvaise:

  <data android:scheme="file" android:host="*" /> 
      <data android:scheme="http" android:host="*" /> 
      <data android:scheme="https" android:host="*" /> 

Vos utilisateurs vous attaqueront avec des pioches si vous interrompez tous les liens qu'ils cliquent sur n'importe où sur leur appareil afin qu'ils aient la possibilité de gérer ce lien avec votre application. S'il vous plaît supprimer ces lignes.

En ce qui concerne votre erreur, vous essayez d'ouvrir une URL Web (http://asap.sourceforge.net/X_Ray_2.sap) via getContentResolver().openInputStream(). Ce n'est pas supporté. Un ContentResolver fonctionne avec les fournisseurs de contenu Android. Si vous souhaitez télécharger quelque chose sur Internet, il existe des API pour cela, comme HttpClient.

+0

Non, je filtre par pathPattern et scheme/host sont nécessaires juste pour que pathPattern fonctionne (apparemment scheme = "*" ne fonctionne pas). Mon application est présentée à l'utilisateur uniquement pour les extensions que j'ai listées (vérifié le navigateur web et le gestionnaire de fichiers OI). – user475838

+0

getContentResolver(). OpenInputStream() fonctionne pour les URL "file:" et je m'attendais à ce qu'il fonctionne également avec "http:". Je vous remercie! – user475838