我的活动应下载文件,然后通过发送Intent.ACTION_VIEW打开它。下载本身工作正常,我可以在下载部分查看它。 如果我使用DownloadManager.ACTION_VIEW_DOWNLOADS Intent而不是Intent.ACTION_VIEW,它也可以正常工作。Android Activity在尝试从BroadcastReceiver中触发Intent.ACTION_VIEW时崩溃
但是,当使用Intent.ACTION_VIEW该活动崩溃。
public class RESTTestDownloadActivity extends SOFAActivity {
private DownloadManager downloadManager;
private IntentFilter downloadFilter;
private BroadcastReceiver downloadReceiver;
private long downloadID;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setTitle("RESTTestDownloadActivity");
downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
TestGetAttachment();
}
private void TestGetAttachment(){
downloadFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("http://address:port/directory/testGetAttachment"));
downloadID = downloadManager.enqueue(request);
downloadReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Toast.makeText(RESTTestDownloadActivity.this, "ACTION_DOWNLOAD_COMPLETE received.", Toast.LENGTH_LONG);
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(downloadID);
Cursor cursor = downloadManager.query(query);
if(cursor.moveToFirst()){
System.out.println("Download matches.");
int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
int status = cursor.getInt(columnIndex);
int columnReason = cursor.getColumnIndex(DownloadManager.COLUMN_REASON);
int reason = cursor.getInt(columnReason);
if(status!=DownloadManager.STATUS_SUCCESSFUL){
System.out.println("Download != STATUS_SUCCESSFUL.");
AlertDialogBuilder.setTitle("Error")
.setMessage(reason)
.setPositiveButton("OK", null)
.show();
} else {
System.out.println("Download = STATUS_SUCCESSFUL.");
Toast.makeText(RESTTestDownloadActivity.this, "Download successful.", Toast.LENGTH_LONG).show();
Uri dlUri = Uri.parse(cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)));
System.out.println("Download-URI: " + dlUri.toString());
unregisterReceiver(downloadReceiver);
downloadReceiver = null;
// This is working perfectly fine
startActivity(new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS));
// But this is crashing
// Intent i = new Intent(Intent.ACTION_VIEW, dlUri);
// i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// startActivity(i);
}
downloadManager.remove(downloadID);
downloadReceiver = null;
}
}
};
registerReceiver(downloadReceiver, downloadFilter);
}
@Override
public void onPause(){
super.onPause();
if(downloadReceiver!=null){
System.out.println("Unregistering downloadReceiver...");
unregisterReceiver(downloadReceiver);
}
}
@Override
public void onResume(){
super.onResume();
if(downloadReceiver!=null){
System.out.println("Registering downloadReceiver...");
registerReceiver(downloadReceiver, downloadFilter);
}
}
正如你可以看到我已经尝试添加FLAG_ACTIVITY_NEW_TASK提到here。
的logcat确实输出以下:
08-05 13:04:35.437:INFO/System.out的(2449):* .RESTTestDownloadActivity.onResume()
08-05 13: 04:35.446:INFO/System.out的(2449):注册downloadReceiver ...
08-05 13:04:35.846:INFO/ActivityManager(77):显示* .RESTTestDownloadActivity:+ 561ms
08 -05 13:04:36.046:INFO/DownloadManager(274):Initi下载请求阿婷24
08-05 13:04:40.956:DEBUG/dalvikvm(216):GC_EXPLICIT释放26K,47%的游离3220K/6023K,外部6059K/7285K,暂停68ms
08-05 13:04:45.855:DEBUG/dalvikvm(157):GC_CONCURRENT已释放795K,56%空闲2872K/6471K,外部2402K/2630K,暂停10ms + 15ms
08-05 13:04:46.135:INFO/System。 out(2449):下载gefunden。
08-05 13:04:46.135:INFO/System.out(2449):Download = STATUS_SUCCESSFUL。
08-05 13:04:46.155:INFO/System.out的(2449):下载-URI:内容://下载/ my_downloads/24
08-05 13:04:46.165:INFO/ActivityManager(77):Starting:Intent {act = android.intent.action.VIEW dat = content:// downloads/my_downloads/24 flg = 0x10000000} from pid 2449
08-05 13:04:46.175:DEBUG/AndroidRuntime(2449):关闭VM
08-05 13:04:46.185:WARN/dalvikvm(2449):线程ID = 1:螺纹与未捕获的异常(组= 0x40015560)
离开08-05 13:04:46.195:ERROR/AndroidRuntime(2449):致命异常:主
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):了java.lang.RuntimeException:错误接收广播Intent {act = android.intent.action.DOWNLOAD_COMPLETE pkg = *(has extras)} in *[email protected]
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):at android。 app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java:722)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):在android.os.Handler.handleCallback(处理程序。的java:587)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):在android.os.Handler.dispatchMessage(Handler.java:92)
08-05 13:04: 46.195:ERROR/AndroidRuntime(2449):at android.os.Looper.loop(Looper.java:123)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):at android.app.ActivityThread 。主要(ActivityThread.java:3683)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):在java.lang.reflect.Method.invokeNative(本机方法)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):at java.lang.reflect.Method.invoke(Method.java:507)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):at com.android .internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):在dalvik.system.NativeStart.main(本机方法)
08-05 13:04:46.195:ERROR/AndroidRunt ime(2449):引起:android.content.ActivityNotFoundException:未找到处理Intent的活动{act = android.intent.action.VIEW dat = content:// downloads/my_downloads/24 flg = 0x10000000}
08 -05 13:04:46.195:ERROR/AndroidRuntime(2449):at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):在android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):at android.app.Activity.startActivityForResult(Activity.java:2827)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):在android.app.Activity.startActivity(Activity.java:2933)
08-05 13:04:46.195:ERROR/AndroidRuntime( (RESTTestDownloadActivity.java:75)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):at android.app.LoadedApk $ ReceiverDispatcher $ Args。运行(LoadedApk.java:709)
08-05 13:04:46.195:ERROR/AndroidRuntime(2449):... 9更
08-05 13:04:46.216:WARN/ActivityManager( 77):部队在完成活动* .RESTTestDownloadActivity
08-05 13:04:46.739:WARN/ActivityManager(77):活动暂停超时HistoryRecord {408abbf0 * .RESTTestDownloadActivity}
任何想法,为什么只有Intent.ACTION_VIEW导致崩溃? 在此先感谢!
对不起,我不明白你在告诉我什么。 使用意图DownloadManager.ACTION_VIEW_DOWNLOADS:下载部分打开,我可以手动打开文件。这意味着**是**文件类型的处理程序。 使用Intent Intent.ACTION_VIEW:应该使用匹配的文件类型处理程序(实际存在)自动打开该文件。但它崩溃。 – Mike