@Override
 String getId(Context ctx) {
   BluetoothAdapter ba = BluetoothAdapter.getDefaultAdapter();
   if (ba == null) {
     w("Bluetooth Adapter not available");
     return null;
   }
   PermissionAssertUtils.assertPermission(ctx, permission.BLUETOOTH);
   return ba.getAddress();
 }
 @Override
 String getId(Context ctx) {
   WifiManager wm = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);
   if (wm == null) {
     w("Wifi Manager not available");
     return null;
   }
   PermissionAssertUtils.assertPermission(ctx, permission.ACCESS_WIFI_STATE); // I
   // guess getMacAddress() has no java doc !!!
   return wm.getConnectionInfo().getMacAddress();
 }
 @Override
 String getId(Context ctx) {
   // TODO : add a SIM based mechanism ? tm.getSimSerialNumber();
   final TelephonyManager tm =
       (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
   if (tm == null) {
     w("Telephony Manager not available");
     return null;
   }
   PermissionAssertUtils.assertPermission(ctx, permission.READ_PHONE_STATE);
   return tm.getDeviceId();
 }