Как определить ID диска?

В новом Android API Google Диска доступны 2 типа строковых идентификаторов: идентификатор «ресурса» и «закодированный» идентификатор.

'encoded' id from DriveId.encodeToString()
"DriveId:CAESHDBCMW1RVVcyYUZKZmRhakIzMDBVbXMYjAUgssy8yYFRTTNKRU55"

'resource' id from DriveId.getResourceId()
"UW2aFJfdajB3M3JENy00Ums0B1mQ"

В процессе я получаю строку, которая может содержать любой из них (результат некоторых проблем со временем). Мой вопрос:

Если мне нужно «разобрать» строку, чтобы определить тип, есть ли характеристика, на которую я могу положиться? Например:

  • Идентификатор 'encoded' всегда будет начинаться с подстроки 'DriveId:'
  • Идентификатор 'resource' будет иметь ограничение по длине
  • могу ли я злоупотреблять возвратом ошибки из 'decodeFromString()'?
  • или я должен сформировать (предварить) строковый контейнер с моим собственным тегом? Каким может быть минимальный «безопасный» тег (то есть то, что никогда не появится в начале этих идентификаторов)?

Пожалуйста, укажите мне правильное направление, чтобы мне не пришлось переделывать это со следующим выпуском.

Я столкнулся с еще одной проблемой, которую следует упомянуть здесь, чтобы другие не тратили время впустую, попадая в ту же яму. «resourceID» может быть перенесен и останется уникальным для объекта, который он идентифицирует, где «encodedID» имеет только область действия «устройство». Означает, что вы НЕ МОЖЕТЕ перенести 'encodedID' на другое устройство (с той же учетной записью) и попытаться получить файл/папку с его помощью. Поэтому я предполагаю, что это уникально для экземпляра Google Play Services.


person seanpj    schedule 03.04.2014    source источник


Ответы (1)


Пожалуйста, не полагайтесь на какое-либо форматирование любого типа идентификатора. Это может быть изменено без предварительного уведомления.

Если вам нужно использовать оба и отслеживать различия между ними, у вас должен быть собственный метод для этого в вашем приложении.

На самом деле, вам, вероятно, всегда следует просто хранить закодированный идентификатор, поскольку он всегда гарантированно присутствует, и если он содержит ресурсный идентификатор, его легко вернуть.

person Cheryl Simon    schedule 03.04.2014
comment
Спасибо, я так и думал. Я хотел бы работать с encodedID, но, к сожалению, моя обработка начинается с «resourceID» из RESTful API (необходимо получить эскизы, описание,... из старой версии), и я асинхронно превращаю его в «encodedIds». Вот где я на мгновение заканчиваю смесью (вы знаете радость многопоточных проектов :-). И все это исчезнет, ​​как только все функциональные возможности будут на месте, верно? - person seanpj; 03.04.2014