我已经编写了一个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