首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Wearable.DataApi.getFdForAsset会产生状态为4005 (资产不可用)的结果?

为什么Wearable.DataApi.getFdForAsset会产生状态为4005 (资产不可用)的结果?
EN

Stack Overflow用户
提问于 2015-08-26 20:54:10
回答 2查看 560关注 0票数 3

我已经编写了一个Android Wear应用程序,它使用Data API从手机应用程序接收包装在Asset中的图像。这个应用程序过去运行得很好,而且已经很久没有改变过了,但最近我开始发现,从手机应用程序传递过来的图像无法在可穿戴设备的屏幕上渲染。在调查中,我发现其中一种方法,getFdForAsset失败,可穿戴状态代码为4005,这意味着资产不可用。请参阅https://developers.google.com/android/reference/com/google/android/gms/wearable/WearableStatusCodes

我在调用可穿戴应用的onDataChanged方法时处理数据事件,如下所示:

代码语言:javascript
运行
复制
    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);

然后尝试使用此方法从资源创建位图:

代码语言:javascript
运行
复制
    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);
}

Asset对象本身不为空,因此它来自移动应用程序OK。并且数据事件的路径被正确地识别为包含图像的路径。

有谁知道我为什么会得到这个结果,以及如何解决它?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-02-01 03:13:44

有一件重要的事..。wearable移动模块必须具有相同的签名证书;只需确保您通过build.gradle定义的签名证书是相同的。这会影响资产转移...其他数据被同步,即使使用不同的证书也没有问题;

我最近正在与这个问题作斗争,并发现这是ASSET_UNAVAILABLE的原因,同时添加穿戴模块到现有的应用程序中,该应用程序具有在build.gradle中定义的自定义调试签名证书-我必须拥有这个证书,即使是可穿戴的资产同步工作。

票数 2
EN

Stack Overflow用户

发布于 2015-09-20 09:34:59

您是如何发送图像的?我发现如果我使用Asset.createFromUri(),它就不能工作,并给出资产不可用的错误。但当我切换到Asset.createFromFd()时,它起作用了。

下面是为我工作的代码:

代码语言:javascript
运行
复制
    private static Asset createAssetFromBitmap(String imagePath) throws FileNotFoundException {
        // creating from Uri doesn't work: gives a ASSET_UNAVAILABLE error
        //return Asset.createFromUri(Uri.parse(imagePath));

        final File file = new File(imagePath);    
        final ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);

        return Asset.createFromFd(fd);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32227254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档