OSDN Git Service

Fix crash in Bluetooth when sharing MMS video.
authorJake Hamby <jhamby@google.com>
Tue, 16 Oct 2012 01:47:09 +0000 (18:47 -0700)
committerJake Hamby <jhamby@google.com>
Tue, 16 Oct 2012 01:47:09 +0000 (18:47 -0700)
Some content providers, such as MMS, don't support the DISPLAY_NAME
or SIZE columns for content URIs. Fall back to using the last segment
of the URI as the filename for Bluetooth file transfers if the query
for DISPLAY_NAME fails.

Bug: 7343310
Change-Id: Ie048c5eea3ba9994259c9e07beabd72622d6b669

src/com/android/bluetooth/opp/BluetoothOppSendFileInfo.java

index 81c3c92..c269ad7 100644 (file)
@@ -36,6 +36,7 @@ import android.content.ContentResolver;
 import android.content.Context;
 import android.content.res.AssetFileDescriptor;
 import android.database.Cursor;
+import android.database.sqlite.SQLiteException;
 import android.net.Uri;
 import android.provider.OpenableColumns;
 import android.util.Log;
@@ -108,9 +109,15 @@ public class BluetoothOppSendFileInfo {
         // bluetooth
         if ("content".equals(scheme)) {
             contentType = contentResolver.getType(uri);
-            Cursor metadataCursor = contentResolver.query(uri, new String[] {
-                    OpenableColumns.DISPLAY_NAME, OpenableColumns.SIZE
-            }, null, null, null);
+            Cursor metadataCursor;
+            try {
+                metadataCursor = contentResolver.query(uri, new String[] {
+                        OpenableColumns.DISPLAY_NAME, OpenableColumns.SIZE
+                }, null, null, null);
+            } catch (SQLiteException e) {
+                // some content providers don't support the DISPLAY_NAME or SIZE columns
+                metadataCursor = null;
+            }
             if (metadataCursor != null) {
                 try {
                     if (metadataCursor.moveToFirst()) {
@@ -122,6 +129,10 @@ public class BluetoothOppSendFileInfo {
                     metadataCursor.close();
                 }
             }
+            if (fileName == null) {
+                // use last segment of URI if DISPLAY_NAME query fails
+                fileName = uri.getLastPathSegment();
+            }
         } else if ("file".equals(scheme)) {
             fileName = uri.getLastPathSegment();
             contentType = type;