diff --git a/res/values/strings.xml b/res/values/strings.xml
index 846e0ab..1389e0d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -178,9 +178,9 @@
     <string name="bt_toast_6">Stopped sending file to \u0022<xliff:g id="recipient">%1$s</xliff:g>\u0022</string>
 
     <!-- Bluetooth System Messages [CHAR LIMIT=NONE] -->
-    <string name="bt_sm_2_1" product="nosdcard">There isn\'t enough space in USB storage to save the file from \u0022<xliff:g id="sender">%1$s</xliff:g>\u0022</string>
+    <string name="bt_sm_2_1_nosdcard">There isn\'t enough space in USB storage to save the file from \u0022<xliff:g id="sender">%1$s</xliff:g>\u0022</string>
     <!-- Bluetooth System Messages -->
-    <string name="bt_sm_2_1" product="default">There isn\'t enough space on the SD card to save the file from \u0022<xliff:g id="sender">%1$s</xliff:g>\u0022</string>
+    <string name="bt_sm_2_1_default">There isn\'t enough space on the SD card to save the file from \u0022<xliff:g id="sender">%1$s</xliff:g>\u0022</string>
     <string name="bt_sm_2_2">Space needed: <xliff:g id="size">%1$s</xliff:g></string>
 
     <string name="ErrorTooManyRequests">Too many requests are being processed. Try again later.</string>
@@ -194,8 +194,8 @@
     <string name="status_canceled">Transfer canceled by user.</string>
     <string name="status_file_error">Storage issue.</string>
     <!-- Shown when USB storage cannot be found.  [CHAR LIMIT=NONE] -->
-    <string name="status_no_sd_card" product="nosdcard">No USB storage.</string>
-    <string name="status_no_sd_card" product="default">No SD card. Insert an SD card to save transferred files.</string>
+    <string name="status_no_sd_card_nosdcard">No USB storage.</string>
+    <string name="status_no_sd_card_default">No SD card. Insert an SD card to save transferred files.</string>
     <string name="status_connection_error">Connection unsuccessful.</string>
     <string name="status_protocol_error">Request can\'t be handled correctly.</string>
     <string name="status_unknown_error">Unknown error.</string>
diff --git a/src/com/android/bluetooth/opp/BluetoothOppTransferActivity.java b/src/com/android/bluetooth/opp/BluetoothOppTransferActivity.java
index 74fd872..fc45d3f 100644
--- a/src/com/android/bluetooth/opp/BluetoothOppTransferActivity.java
+++ b/src/com/android/bluetooth/opp/BluetoothOppTransferActivity.java
@@ -309,7 +309,10 @@
         } else if (mWhichDialog == DIALOG_RECEIVE_COMPLETE_FAIL) {
             if (mTransInfo.mStatus == BluetoothShare.STATUS_ERROR_SDCARD_FULL) {
                 mLine1View = (TextView) mView.findViewById(R.id.line1_view);
-                tmp = getString(R.string.bt_sm_2_1, mTransInfo.mDeviceName);
+                int id = BluetoothOppUtility.deviceHasNoSdCard()
+                        ? R.string.bt_sm_2_1_nosdcard
+                        : R.string.bt_sm_2_1_default;
+                tmp = getString(id);
                 mLine1View.setText(tmp);
                 mLine2View = (TextView) mView.findViewById(R.id.line2_view);
                 tmp = getString(R.string.download_fail_line2, mTransInfo.mFileName);
diff --git a/src/com/android/bluetooth/opp/BluetoothOppUtility.java b/src/com/android/bluetooth/opp/BluetoothOppUtility.java
index 1b5cd59..7533d0d 100644
--- a/src/com/android/bluetooth/opp/BluetoothOppUtility.java
+++ b/src/com/android/bluetooth/opp/BluetoothOppUtility.java
@@ -45,6 +45,7 @@
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Environment;
+import android.os.SystemProperties;
 import android.util.Log;
 
 import com.android.bluetooth.R;
@@ -56,6 +57,7 @@
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -66,6 +68,8 @@
     private static final String TAG = "BluetoothOppUtility";
     private static final boolean D = Constants.DEBUG;
     private static final boolean V = Constants.VERBOSE;
+    /** Whether the device has the "nosdcard" characteristic, or null if not-yet-known. */
+    private static Boolean sNoSdCard = null;
 
     private static final ConcurrentHashMap<Uri, BluetoothOppSendFileInfo> sSendFileMap =
             new ConcurrentHashMap<Uri, BluetoothOppSendFileInfo>();
@@ -292,6 +296,17 @@
     }
 
     /**
+     * Whether the device has the "nosdcard" characteristic or not.
+     */
+    public static boolean deviceHasNoSdCard() {
+        if (sNoSdCard == null) {
+            String characteristics = SystemProperties.get("ro.build.characteristics", "");
+            sNoSdCard = Arrays.asList(characteristics).contains("nosdcard");
+        }
+        return sNoSdCard;
+    }
+
+    /**
      * Get status description according to status code.
      */
     public static String getStatusDescription(Context context, int statusCode, String deviceName) {
@@ -311,11 +326,15 @@
         } else if (statusCode == BluetoothShare.STATUS_FILE_ERROR) {
             ret = context.getString(R.string.status_file_error);
         } else if (statusCode == BluetoothShare.STATUS_ERROR_NO_SDCARD) {
-            ret = context.getString(R.string.status_no_sd_card);
+            int id = deviceHasNoSdCard()
+                    ? R.string.status_no_sd_card_nosdcard
+                    : R.string.status_no_sd_card_default;
+            ret = context.getString(id);
         } else if (statusCode == BluetoothShare.STATUS_CONNECTION_ERROR) {
             ret = context.getString(R.string.status_connection_error);
         } else if (statusCode == BluetoothShare.STATUS_ERROR_SDCARD_FULL) {
-            ret = context.getString(R.string.bt_sm_2_1, deviceName);
+            int id = deviceHasNoSdCard() ? R.string.bt_sm_2_1_nosdcard : R.string.bt_sm_2_1_default;
+            ret = context.getString(id);
         } else if ((statusCode == BluetoothShare.STATUS_BAD_REQUEST) || (statusCode
                 == BluetoothShare.STATUS_LENGTH_REQUIRED) || (statusCode
                 == BluetoothShare.STATUS_PRECONDITION_FAILED) || (statusCode
