web-dev-qa-db-ja.com

androidの文字列からUUIDを作成する方法

私のアプリでは、特定のサービスuui​​d _2415_の低エネルギーBluetoothをスキャンします。文字列2415をuuidに変換するためにUUID serviceUUID = UUID.fromString("2415");を使用していますが、この行で例外が発生しますIllegalArgumentException:Invalid UUID 2415。

この点で私を助けてください、この点で私は非常に感謝します。前もって感謝します。

39
user3056760

クラスの使用 [〜#〜] uuid [〜#〜]

このような例:

 UUID.randomUUID().toString()
35

受け入れられた回答は、@ Michaelによるコメントで提供されました。

短いUUIDとBluetoothベースUUIDを組み合わせてみましたか?つまり「00002415-0000-1000-8000-00805F9B34FB」? (2415 16進数を意味すると仮定)?

このスレッドを最初に読んだときに見逃したため、そのコメントを回答に変換しています。

18

使用できます

String str = "1234";
UUID uuid = UUID.nameUUIDFromBytes(str.getBytes());

System.out.print(uuid.toString());
11
Özer Özcan

ここで多くの人々を導くかもしれない混乱は、短いコードのUUIDを使用して、他のプラットフォーム(たとえばiOSで [〜#〜] cbuuid [〜#〜] のbluetoothサービスと特性を参照できることです。 On Androidただし、 RFC4122 で指定されているように、完全な128ビット長のUUIDを提供する必要があります。

修正(@Michaelが指摘したように)は、16ビットまたは32ビットの短いUUIDを base bluetooth UUID の前に追加することです。これらの関数を使用して、これを少し簡単にすることができます。

public static final String baseBluetoothUuidPostfix = "0000-1000-8000-00805F9B34FB";

public static UUID uuidFromShortCode16(String shortCode16) {
    return UUID.fromString("0000" + shortCode16 + "-" + baseBluetoothUuidPostfix);
}

public static UUID uuidFromShortCode32(String shortCode32) {
    return UUID.fromString(shortCode32 + "-" + baseBluetoothUuidPostfix);
}

例えば:

UUID uuid = uuidFromShortCode16("FFF0");

これにより、"0000FFF0-0000-1000-8000-00805F9B34FB"からUUIDオブジェクトが作成されます。

8
92tonywills

これが役立つことを願っています
例外は、UUID.fromString()メソッドの無効な引数によるものです。

UUID.fromString()メソッドは、引数として_"302a5a70-c085-4946-b702-fc1deb1046af"_タイプの文字列を想定し、UUIDクラスのインスタンスを返します。
ショートハンド16ビットuuidを128ビットuuidに変換するには、このテンプレート_"0000XXXX-0000-1000-8000-00805F9B34FB"_を使用できます。ここでXXXXを16ビットのuuidに置き換えます。

例えば:
あなたの場合、128ビットのUUIDは_"00002415-0000-1000-8000-00805F9B34FB"_になります。
そして文字列からUUIDを取得するには、次のようなコードを使用する必要があります

UUID uuid = UUID.fromString("00002415-0000-1000-8000-00805F9B34FB");
https://newcircle.com/s/post/1786/2016/01/04/bluetooth-uuids-and-interoperable-advertisements

5
Akhilesh Kumar

他の人が指摘しているように、「2415」はUUIDに似ていないので、文字列「2415」はlongからまっすぐに変換されただけだと感じています。その場合は、2つのlongを取るUUIDコンストラクターを使用する必要があります。

uuid = new UUID(long mostSignificant, long leastSignificant)

ここでこれらの長い値を取得できます

uuid.getMostSignificantBits()uuid.getLeastSignificantBits()

あなたの場合、あなたはuuid = new UUID(2415,2415)のようなことをするかもしれません

0
bremen_matt