お仕事で直面したネタ&メモです。

DocumentsContract.getDocumentId(contentUri)の戻り値が、4.4系と5系で変わってた。
些細な内容なので軽くメモ。


前者は”:”をセパレータとしたKeyValueフォーマットで、webで見るサンプルコードはコレで書かれたものが多いです。

String returnStr = DocumentsContract.getDocumentId(somethingUri);
String id = returnStr.split(":")[1];

こんな感じ。

後者の5系ですが、Nexus7で同じAPIたたくと、String型のID値だけが返ってきていました。
つまり、前者のKeyValueフォーマットのValue部分だけが戻ってきます。
KeyValueフォーマットで返ってくる前提で、String.split(":")[1]な書き方してると、ArrayIndexOutOfBoundsExceptionが出ちゃいます。

単にValueを取るだけならば、

String returnStr = DocumentsContract.getDocumentId(somethingUri);
String split = returnStr.split(":");
int splitIndex = split.length - 1;
String id = split[splitIndex];

こうすれば問題なし。