2013-02-14 37 views
0

这是我的广播接收器:下载管理器崩溃上下载完成

BroadcastReceiver broadcast = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { 
      dwnId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); 
      Cursor c = DownloadManagerWrapper.getInstance(getActivity()).getDownloadManager().query(new DownloadManager.Query().setFilterById(dwnId)); 
      c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)); 
     } else { 
      Toast.makeText(getActivity(), "ERROR!", Toast.LENGTH_SHORT).show(); 
     } 

    } 
}; 

在我onCreateView我注册它:

(getActivity()).registerReceiver(broadcast, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 

这是我DownloadManagerWrapper看起来像:

public class DownloadManagerWrapper { 
private static final String DOWNLOAD_SERVICE = "download"; 

private DownloadManager mgr; 

private static DownloadManagerWrapper i; 

private DownloadManagerWrapper(Context c) { 
    mgr = (DownloadManager) c.getSystemService(DOWNLOAD_SERVICE); 
} 

public static DownloadManagerWrapper getInstance(Context c) { 
    if (i == null) { 
     i = new DownloadManagerWrapper(c); 
    } 
    return i; 
} 

public DownloadManager getDownloadManager() { 
    return mgr; 
} 

} 

这就是我所做的,使它成为FC:

if(Util.hasNetworkConnection(ctx)){ 
     Uri destination = Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath() + "/media/video.mp4"); 
     DownloadManagerWrapper.getInstance(ctx).getDownloadManager().enqueue(new DownloadManager.Request(uri).setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE).setAllowedOverRoaming(false).setDestinationUri(destination)); 
    }else{ 
     Toast.makeText(ctx, "No Internet Available!!", Toast.LENGTH_SHORT).show(); 
    } 

我得到这个错误:

02-14 15:57:03.488: E/AndroidRuntime(4987): FATAL EXCEPTION: main 
02-14 15:57:03.488: E/AndroidRuntime(4987): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.DOWNLOAD_COMPLETE flg=0x10 pkg=com.Red.medicalpaint (has extras) } in [email protected] 
02-14 15:57:03.488: E/AndroidRuntime(4987):  at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:765) 
02-14 15:57:03.488: E/AndroidRuntime(4987):  at android.os.Handler.handleCallback(Handler.java:615) 
02-14 15:57:03.488: E/AndroidRuntime(4987):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-14 15:57:03.488: E/AndroidRuntime(4987):  at android.os.Looper.loop(Looper.java:137) 
02-14 15:57:03.488: E/AndroidRuntime(4987):  at android.app.ActivityThread.main(ActivityThread.java:4978) 
02-14 15:57:03.488: E/AndroidRuntime(4987):  at java.lang.reflect.Method.invokeNative(Native Method) 
+0

您是否尝试过调试Environment.getExternalStorageDirectory()。getAbsolutePath()+“/media/video.mp4”以查看它是否返回正确的路由? – 2013-02-14 13:11:09

+0

是的,我不得不做广告“file://”。现在它是正确的。但我有另一个问题。我现在要编辑我的问题 – 2013-02-14 13:13:07

回答

0

评论这条线,使得它的工作:

c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));

+0

它为什么有效? – joseRo 2014-02-11 11:30:53