2016-08-11 1 views
1

Ich versuche, meine Adobe AIR Android App automatisch zum Öffnen eines bestimmten Dateityps zu verwenden. Ich habe viele Beispiele dafür durchgegangen, aber ich konnte keins finden, das richtig funktioniert (viele relevante Fragen zu SO sind 4-6 Jahre alt und vielleicht nicht mehr genau?).Verwenden von Absichtsfilter zum Öffnen des Dateityps mit der Adobe AIR-App

Angenommen, ich möchte eine Binärdatei mit der Erweiterung .abc in meiner App öffnen. Dies ist, was ich habe meine Anwendungsdeskriptordatei hinzugefügt:

<android> 
    <manifestAdditions> 
    <![CDATA[ 
     <manifest android:installLocation="auto"> 
    <uses-permission android:name="android.permission.VIBRATE" /> 
    <uses-sdk android:minSdkVersion="8" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch" /> 
    <application> 
     <activity android:name="com.example.myapp.OpenFileActivity" android:label="MyApp"> 
      <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:mimeType="application/abc"/> 
      </intent-filter> 

      <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:mimeType="application/octet-stream"/> 
      </intent-filter> 

      <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="content" /> 
       <data android:mimeType="*/*" /> 
       <data android:pathPattern=".*\\.abc" /> 
       <data android:host="*" /> 
      </intent-filter> 

     </activity> 
    </application> 
     </manifest> 
    ]]> 
    </manifestAdditions> 
</android> 

AS3-Code (nur versuchen, die Invoke arbeiten, bevor ich versuche, eine Funktionalität, um es hinzuzufügen):

//... 
NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke); 
//...  

private function onInvoke(e:InvokeEvent):void { 
    trace(e.toString()); 
} 

Nachdem ich installiere Wenn ich versuche, eine ABC-Datei zu öffnen (z. B. durch Tippen auf einen Anhang in Google Mail), wird sofort eine Meldung angezeigt: "Leider wurde [App-Name] beendet."

Wenn ich durch logcat anschaue, sehe ich den Fehler:

E/AndroidRuntime(13835): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.myapp/com.example.myapp.OpenFileActivity}:

java.lang.ClassNotFoundException: Didn't find class "com.example.myapp.OpenFileActivity" on path: DexPathList[[zip file "/data/app/com.example.myapp-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.myapp-1, /vendor/lib, /system/lib]]

aber wenn ich die android:name="com.example.myapp.OpenFileActivity" entfernen, erhalte ich einen Build-Fehler: Tag <activity> missing required attribute name.

Was soll ich fehlen oder falsch? Bitte beachten Sie, dass dies eine Adobe AIR-App und keine native Android-App ist.

Antwort

1

Das Problem ist, dass die Aktivität, die Sie definieren ist nicht tatsächlich eine Java-Aktivität Klasseninstanz in Ihrer Anwendung daher der Klasse nicht gefunden Fehler.

Wir verwenden den folgend für die Hauptluftaktivität kontrollierenden:

<manifestAdditions> 
    <![CDATA[ 
    <manifest android:installLocation="auto"> 

     <application> 
      <activity> 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN"/> 
        <category android:name="android.intent.category.LAUNCHER"/> 
       </intent-filter> 
       <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="custom_url_scheme" /> 
       </intent-filter> 
      </activity> 

     </application> 

    </manifest> 
    ]]> 
</manifestAdditions> 

den leeren Aktivitätsknoten verwenden sollte die Absicht Filter auf die tatsächliche AIR-Anwendung Aktivität hinzufügen. Daher sollten Sie in der Lage sein, die anderen Intent-Filter hinzuzufügen, die Sie zu diesem Zeitpunkt benötigen.

Verwandte Themen