使用正确的 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。也许这是你的问题。
我正在尝试创建一个测试应用程序,它将从内部启动不同播放器应用程序的意图。
试过这样的事情:
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。也许这是你的问题。