使用正确的 return 代码处理 startActivityForResult()

Handling startActivityForResult() with proper return code

我正在尝试创建一个测试应用程序,它将从内部启动不同播放器应用程序的意图。

试过这样的事情:

Intent intent = new Intent();  
intent.setAction(android.content.Intent.ACTION_VIEW);  
File file = new File("/sdcard/1234.mp4");  
intent.setDataAndType(Uri.fromFile(file), "video/*");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setClassName("com.android.gallery3d","com.android.gallery3d.app.MovieActivity");
startActivityForResult(intent, ON_COMPLETION);

我知道 startActivityForResult() 将在启动的意图完成后触发回调。正如在 onActivityResult() 实现中预期的那样,我收到了完成通知。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);  
    Log.i(TAG,"onActivityResult with resultCode " + resultCode + "requestCode" + requestCode);

}

但是,我的问题是我总是得到 resultCode 作为 "ZERO" 即 resultCode = RESULT_CANCELED 即使播放成功或者即使我启动 Intent 时指定了无效的文件名。

这是我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.rtcdemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.rtcdemo.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

这是我的问题:
1. 我们如何更好地处理 onCompletion 事件?即启动意图的 return 状态,播放是成功还是失败。
2. 如果这不是正确的实施方式,能否请您指导我找到正确的教程集,我可以获得一些示例代码?

我的objective是图库、MX播放器、VLC等多种媒体播放器应用的启动intent,了解指定片段的文件播放是否成功。

我是新手,关于这个主题的一些建议会更有帮助。

如 Android 开发人员在 Activities

中所写

In other protocols (such as ACTION_MAIN or ACTION_VIEW), you may not get the result when you expect.

你不能指望动作视图 return 会得到你所期望的,所以我所做的是实现一个自定义警报对话框,显示所有可以打开某个文件的可能应用程序,一个稍微修改的版本如此处所示 Custom intent chooser

more

更新
经过更多搜索后,我发现 that,你可以看到各种 classes,但重要的是你正在调用的 class 并没有改变 return值。
您调用的 MovieActivity 扩展了 Activity 而不是 ActivityState。
在摘要 class ActivityState 中,值在变化,它 returns。也许这是你的问题。