首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >附近连接:为什么Downloads文件夹中的有效负载文件为空?

附近连接:为什么Downloads文件夹中的有效负载文件为空?
EN

Stack Overflow用户
提问于 2019-01-26 16:45:47
回答 2查看 507关注 0票数 0

我正在使用Nearby Connections Exchange page上的文件传输示例(“更复杂的示例”代码片段)。

我可以在Download/Nearby文件夹中的其他设备上发送和接收图像。图像被成功发送,因为如果我要更改文件名以赋予其适当的扩展名(例如.jpg),我可以在相册应用程序中打开图像。

代码语言:javascript
复制
        private void processFilePayload(long payloadId) {
            Payload filePayload = completedFilePayloads.get(payloadId);
            String filename = filePayloadFilenames.get(payloadId);
            if (filePayload != null && filename != null) {
                completedFilePayloads.remove(payloadId);
                filePayloadFilenames.remove(payloadId);

                // Retrieve received file from Downloads folder
                Payload.File payloadFile2 = filePayload.asFile();
                File payloadJavaFile = payloadFile2.asJavaFile();

                if (payloadJavaFile == null) {
                    Log.d(TAG, "Payload java file is null in processFilePayload()");
                } else {
                    payloadJavaFile.renameTo(new File(payloadJavaFile.getParentFile(), filename));
                }
            }
        }

为什么payloadJavaFile变量是空的?通过查看Payload.class,我知道asJavaFile()的结果是一个可以为空的文件,并且在asJavaFile() method description中,从onPayloadReceived()内部调用processFilePayload()中的asJavaFile() (如API页面上的示例所做的那样)可能会导致文件尚未接收到所有有效负载的内容。但是,在验证了PayloadTransferUpdate是否成功之后,我还从onPayloadTransferUpdate()中调用了processFilePayload(),因此有效负载不应该在这个阶段接收到它的所有内容(并且在有效负载对象上调用asJavaFile()时不是空的)?

我的代码与发送和接收图像和文件名的文档几乎相同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-15 08:01:16

如果没有为您的应用程序正确设置READ_EXTERNAL_STORAGE权限,Payload.asJavaFile()将为null。您需要在AndroidManifest.xml中使用READ_EXTERNAL_STORAGE,并且还需要在运行时请求READ_EXTERNAL_STORAGE权限,因为这是一个危险的权限。(https://developer.android.com/training/permissions/requesting)

要使用附近的连接共享文件,您的应用程序将需要以下所有条件:

AndroidManifest.xml

代码语言:javascript
复制
<!-- Required for Nearby Connections -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Optional: needed to share files -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

MainActivity.java

代码语言:javascript
复制
ActivityCompat.requestPermissions(thisActivity,
                new String[]{               
                  Manifest.permission.ACCESS_COARSE_LOCATION,
                  Manifest.permission.READ_EXTERNAL_STORAGE
                },
                PERMISSIONS_REQUEST_CODE);

我们将改进文档,使共享文件的这一要求更加明显。

票数 3
EN

Stack Overflow用户

发布于 2019-01-29 16:47:57

我检查了源代码。在我看来,asJavaFile()总是被设置的(我不确定为什么它被标记为@ sure )。

不幸的是,如果我要进一步研究它,我需要你给我提供一个重现你所看到的bug的示例应用程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54376911

复制
相关文章

相似问题

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