android - 使用 intent-filter 通过 Adob​​e AIR 应用程序打开文件类型

标签 android actionscript-3 air android-manifest

我正在尝试将我的 Adobe 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: 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]]

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

我错过了什么或做错了什么? 请记住,这是一个 Adob​​e AIR 应用程序,而不是原生 Android 应用程序。

最佳答案

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

我们使用以下内容来控制主要的 AIR Activity :

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

使用空白 Activity 节点应该将 Intent 过滤器添加到实际的 AIR 应用程序 Activity 中。因此,此时您应该能够添加所需的其他 Intent 过滤器。

关于android - 使用 intent-filter 通过 Adob​​e AIR 应用程序打开文件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38906825/

相关文章:

android - 更改android应用程序的基本主题颜色

android - 将布局包裹在边框中

arrays - 如何定义一个包含单个元素的数组?

flash - 如何为您的网络应用程序创建漂亮的截屏视频?

android - 自动更正和限制的 StageText 问题

ios - 为 AIR : is it possible to start on Windows 开发扩展

android - 在不知道其名称的情况下启动当前应用程序的主要 Activity

actionscript-3 - ActionScript 是否具有 "core dump"的等效项?

apache-flex - 在 Adob​​e Flex/AIR 应用程序中调整应用程序窗口大小时调整容器大小

android - 为什么安卓:fullBackupOnly default value is false?