使用intent-filter通过Adobe AIR app打开文件类型

时间:2016-08-11 22:04:56

标签: android actionscript-3 air android-manifest

我正在尝试将 Adob​​e AIR Android应用设置为自动用于打开特定类型的文件。我已经经历了很多这方面的例子但是却找不到一个正常工作的例子(关于SO的许多相关问题是4-6岁,也许不再准确?)。

假设我想在我的应用中打开扩展名为.abc的二进制文件。这是我添加到我的应用程序描述符中的内容:

<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代码(在尝试向其添加任何功能之前尝试使Invoke工作):

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

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

在应用程序描述符中使用上述代码安装应用程序后,如果我尝试打开ABC文件(例如,通过点击Gmail中的附件),会立即显示一条消息“不幸的是,[应用程序名称]已停止。 “

如果我查看logcat,我会看到错误:

  

E / AndroidRuntime(13835):java.lang.RuntimeException:无法实例化活动ComponentInfo {com.example.myapp / com.example.myapp.OpenFileActivity}:

     

java.lang.ClassNotFoundException:在路径上找不到类“com.example.myapp.OpenFileActivity”:DexPathList [[zip file“/data/app/com.example.myapp-1.apk"],nativeLibraryDirectories = [/ data / app-lib / com.example.myapp-1,/ vendor / lib,/ system / lib]]

但如果我删除了android:name="com.example.myapp.OpenFileActivity",则会收到构建错误:Tag <activity> missing required attribute name.

我错过了什么或做错了什么? 请注意,这是一个Adobe AIR应用,而不是原生的Android应用。

1 个答案:

答案 0 :(得分:1)

问题是您定义的活动OpenFileActivity实际上并不是应用程序中的java Activity类实例,因此找不到类错误。

我们使用以下内容来控制主AIR活动:

<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>

使用空白活动节点应将意图过滤器添加到实际的AIR应用程序活动中。所以你应该能够在那时添加你需要的其他意图过滤器。