diff --git a/src/com/android/messaging/util/UriUtil.java b/src/com/android/messaging/util/UriUtil.java
index 6e39749..f92155f 100644
--- a/src/com/android/messaging/util/UriUtil.java
+++ b/src/com/android/messaging/util/UriUtil.java
@@ -49,6 +49,8 @@
     private static final String SCHEME_MMSTO = "smsto";
     public static final HashSet<String> SMS_MMS_SCHEMES = new HashSet<String>(
         Arrays.asList(SCHEME_SMS, SCHEME_MMS, SCHEME_SMSTO, SCHEME_MMSTO));
+    private static final String SCHEME_HTTP = "http";
+    private static final String SCHEME_HTTPS = "https";
 
     public static final String SCHEME_BUGLE = "bugle";
     public static final HashSet<String> SUPPORTED_SCHEME = new HashSet<String>(
@@ -98,8 +100,7 @@
     public static boolean isFileUri(final Uri uri) {
         return uri != null &&
                 uri.getScheme() != null &&
-                TextUtils.equals(uri.getScheme().trim().toLowerCase(),
-                        ContentResolver.SCHEME_FILE);
+                uri.getScheme().trim().toLowerCase().contains(ContentResolver.SCHEME_FILE);
     }
 
     /**
@@ -216,9 +217,10 @@
                 inputStream = context.getContentResolver().openInputStream(sourceUri);
             } else {
                 // The content is remote. Download it.
-                final URL url = new URL(sourceUri.toString());
-                final URLConnection ucon = url.openConnection();
-                inputStream = new BufferedInputStream(ucon.getInputStream());
+                inputStream = getInputStreamFromRemoteUri(sourceUri);
+                if (inputStream == null) {
+                    return null;
+                }
             }
             return persistContentToScratchSpace(inputStream);
         } catch (final Exception ex) {
@@ -235,6 +237,23 @@
         }
     }
 
+    @DoesNotRunOnMainThread
+    private static InputStream getInputStreamFromRemoteUri(final Uri sourceUri)
+            throws IOException {
+        if (isRemoteUri(sourceUri)) {
+            final URL url = new URL(sourceUri.toString());
+            final URLConnection ucon = url.openConnection();
+            return new BufferedInputStream(ucon.getInputStream());
+        } else {
+            return null;
+        }
+    }
+
+    private static boolean isRemoteUri(final Uri sourceUri) {
+        return sourceUri.getScheme().equals(SCHEME_HTTP)
+            || sourceUri.getScheme().equals(SCHEME_HTTPS);
+    }
+
     /**
      * Persist a piece of content from the given input stream, byte by byte to the specified
      * directory.
@@ -273,9 +292,10 @@
                 inputStream = context.getContentResolver().openInputStream(sourceUri);
             } else {
                 // The content is remote. Download it.
-                final URL url = new URL(sourceUri.toString());
-                final URLConnection ucon = url.openConnection();
-                inputStream = new BufferedInputStream(ucon.getInputStream());
+                inputStream = getInputStreamFromRemoteUri(sourceUri);
+                if (inputStream == null) {
+                    return null;
+                }
             }
             return persistContent(inputStream, outputDir, contentType);
         } catch (final Exception ex) {
