2013-09-24 22 views
3

我无法使用上述设备中的DownloadManager下载文件。相同的代码适用于所有其他设备。 问题是为什么它不能只在这个设备上工作。如果这是三星的具体问题,是否有解决方法?我试图改变下载应该发生的目录,但是这也不起作用。Samsung Tab中的Android下载管理器问题GT-P3100

Android操作系统4.1.2

崩溃日志:

09-24 15:48:34.298: E/ActivityThread(19843): Failed to find provider info for downloads 
09-24 15:48:34.306: D/AndroidRuntime(19843): Shutting down VM 
09-24 15:48:34.337: E/AndroidRuntime(19843): FATAL EXCEPTION: main 
09-24 15:48:34.337: E/AndroidRuntime(19843): java.lang.IllegalArgumentException: Unknown URL content://downloads/my_downloads 
09-24 15:48:34.337: E/AndroidRuntime(19843): at android.content.ContentResolver.insert(ContentResolver.java:860) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at android.app.DownloadManager.enqueue(DownloadManager.java:1252) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at com.example.ws.appcatalog.exampleDownloadManager.startDownload(exampleDownloadManager.java:59) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at com.example.ws.wsUtil$GetEulaOrApkUrlTask.onPostExecute(wsUtil.java:340) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at com.example.ws.wsUtil$GetEulaOrApkUrlTask.onPostExecute(wsUtil.java:1) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at android.os.AsyncTask.finish(AsyncTask.java:631) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at android.os.Looper.loop(Looper.java:137) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at android.app.ActivityThread.main(ActivityThread.java:4895) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at java.lang.reflect.Method.invokeNative(Native Method) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at java.lang.reflect.Method.invoke(Method.java:511) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761) 
09-24 15:48:34.337: E/AndroidRuntime(19843): at dalvik.system.NativeStart.main(Native Method) 

我的代码:

public void startDownload(String apkUrl, String appName){ 

    DownloadManager.Request request = buildRequest(apkUrl, appName); 

    long lastDownloadId = mDownloadManager.enqueue(request); 

    Logger.d("In XYZDownloadManager, " + "AppName: " + appName + " with ID: " + lastDownloadId); 

} 

private DownloadManager.Request buildRequest(String apkUrl, String appName){ 

    Uri uri = Uri.parse(apkUrl); 

    DownloadManager.Request appDownloadRequest = new DownloadManager.Request(uri); 

    appDownloadRequest.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI 
      | DownloadManager.Request.NETWORK_MOBILE) 
      .setAllowedOverRoaming(false) 
      .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE) 
      .setTitle(appName) 
      .setDescription(WorkspaceApp.getAppContext().getResources().getString(R.string.app_download_description)) 
      .setMimeType("application/vnd.android.package-archive") 
      .setDestinationInExternalFilesDir(mContext, Environment.DIRECTORY_DOWNLOADS, appName + ".apk"); 

    return appDownloadRequest; 
} 
+2

这是发生在一个特定的设备或所有(几个)GT-P3100的? – ozbek

+0

同意,除非另有说明,我会认为这是一个有缺陷的ROM模块运行你的应用程序。该错误表示下载应用程序及其“ContentProvider”在设备上不存在。 – CommonsWare

+0

奇怪的是它在我们拥有的其他GT-P3100上工作。 –

回答

8

的问题是:该设备具有下载管理应用程序禁用。充其量,国际海事组织,我们可以做的就是通知用户,当我们入队下载时,如果他们想再次启用它,当我们收到IllegalArgumentException时,设备的下载管理器被禁用。

+0

或者,您可以检查DownloadManager的启用状态('PackageManager.getComponentEnabledSetting()'?)并被其他方法导致的'IllegalArgumentException'杀死,并且能够正确解决它们:) – ozbek

+0

我只在一个特定行中得到Exception:long lastDownloadId = mDownloadManager.enqueue(request);在我应该警惕的那一行中,我可能会遇到哪些其他异常? –

+1

我不知道,也许没有别的。我只是暗示,通常最好不要捕捉异常,并让“bug”可见。 – ozbek