我已經編寫了一個Android Wear應用程序,該應用程序使用數據API從手機應用程序接收包裝在資產中的圖像。該應用曾經工作得很好,並且在年齡方面沒有改變,但最近我開始發現從手機應用傳來的圖像無法在可穿戴屏幕上呈現。在調查中,我發現其中一種方法getFdForAsset失敗,可穿戴狀態代碼爲4005,意味着資產不可用。查看列在呼叫https://developers.google.com/android/reference/com/google/android/gms/wearable/WearableStatusCodes爲什麼Wearable.DataApi.getFdForAsset產生狀態爲4005(資產不可用)的結果?
我處理數據事件到我的穿戴式應用的onDataChanged方法是這樣的:
public void onDataChanged(DataEventBuffer dataEvents) {
LOGD(TAG, "XXXX MainActivity.onDataChanged()");
final List<DataEvent> events = FreezableUtils.freezeIterable(dataEvents);
dataEvents.close();
LOGD(TAG, "onDataChanged data event count=" + events.size());
for (DataEvent event : events) {
if (event.getType() == DataEvent.TYPE_CHANGED) {
String path = event.getDataItem().getUri().getPath();
if (IMAGE_PATH.equals(path)) {
DataMapItem dataMapItem = DataMapItem.fromDataItem(event.getDataItem());
LOGD(TAG, "onDataChanged getting image asset");
Asset photo = dataMapItem.getDataMap()
.getAsset(IMAGE_KEY);
LOGD(TAG, "onDataChanged photo asset="+photo);
final String toi_name = dataMapItem.getDataMap().getString(GYBO_NAME);
final String toi_info = dataMapItem.getDataMap().getString(GYBO_INFO);
current_toi_name = toi_name;
current_toi_info = toi_info;
LOGD(TAG, "onDataChanged TOI name="+toi_name);
LOGD(TAG, "onDataChanged TOI info="+toi_info);
Bitmap bitmap = loadBitmapFromAsset(google_api_client, photo);
,然後嘗試在此方法來創建從資產位圖:
private Bitmap loadBitmapFromAsset(GoogleApiClient apiClient, Asset asset) {
if (asset == null) {
throw new IllegalArgumentException("XXXX Asset must be non-null");
}
DataApi.GetFdForAssetResult result = Wearable.DataApi.getFdForAsset(
apiClient, asset).await();
if (result == null) {
Log.w(TAG, "XXXX getFdForAsset returned null");
return null;
}
if (result.getStatus().isSuccess()) {
Log.d(TAG, "XXXX loadBitmapFromAsset getFdForAsset was successful");
} else {
Log.d(TAG, "XXXX loadBitmapFromAsset getFdForAsset was not successful. Error="+result.getStatus().getStatusCode()+":"+result.getStatus().getStatusMessage());
// Seeing status code 4005 here which means Asset Unavailable
}
InputStream assetInputStream = result.getInputStream();
if (assetInputStream == null) {
Log.w(TAG, "XXXX Requested an unknown Asset");
result.release();
return null;
}
result.release();
return BitmapFactory.decodeStream(assetInputStream);
}
資產對象本身不是空的,所以它從移動應用程序中發現OK。數據事件的路徑被正確識別爲包含圖像的路徑。
有沒有人有任何想法,爲什麼我得到這個結果以及如何解決它?
謝謝
你解決了嗎?我有同樣的問題,當它工作正常之前 – krakig