Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android开发的数据事件中放置多个资产_Java_Android_Wear Os - Fatal编程技术网

Java 如何在Android开发的数据事件中放置多个资产

Java 如何在Android开发的数据事件中放置多个资产,java,android,wear-os,Java,Android,Wear Os,我正在尝试制作一个应用程序,将文件从我的安卓手表发送到我的安卓手机 我的问题是,如果我录制并保存多个文件,并同时发送所有文件,我就无法将所有文件恢复到手机端。我只收到一个文件 发送文件的代码如下所示。此代码在手表端实现: public void sendData(View v){ String fname = "_Activity.bin"; int FileCounterCopy = FileCounter; if(mGoogleApiClient.isConnecte

我正在尝试制作一个应用程序,将文件从我的安卓手表发送到我的安卓手机

我的问题是,如果我录制并保存多个文件,并同时发送所有文件,我就无法将所有文件恢复到手机端。我只收到一个文件

发送文件的代码如下所示。此代码在手表端实现:

public void sendData(View v){
    String fname = "_Activity.bin";
    int FileCounterCopy = FileCounter;
    if(mGoogleApiClient.isConnected()){
        for (int i = 0; i < FileCounterCopy ; i++){
            String FileName = String.valueOf(i) + fname;
            File dataFile = new File(Environment.getExternalStorageDirectory(), FileName);
            Log.i("Path", Environment.getExternalStorageDirectory().toString());
            Log.i("file", dataFile.toString());

            Asset dataAsset = createAssetfromBin(dataFile);
            sensorData = PutDataMapRequest.create(SENSOR_DATA_PATH);
            sensorData.getDataMap().putAsset("File", dataAsset);

            PutDataRequest request = sensorData.asPutDataRequest();
            Wearable.DataApi.putDataItem(mGoogleApiClient, request).setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
                @Override
                public void onResult(DataApi.DataItemResult dataItemResult) {
                    Log.e("SENDING IMAGE WAS SUCCESSFUL: ", String.valueOf(dataItemResult.getStatus().isSuccess()));
                }
            });
            boolean deleted = dataFile.delete();
            Log.i("Deleted", String.valueOf(deleted));
            FileCounter--;
        }
        mTextView.setText(String.valueOf(FileCounter));
        Return();

    }
    else {
        Log.d("Not", "Connecteddddddddd");
    }

}
public void sendData(视图v){
字符串fname=“\u Activity.bin”;
int FileCounterCopy=FileCounter;
if(mgoogleapClient.isConnected()){
对于(int i=0;i
接收文件的代码如下所示,并在电话端实现

@Override
public void onDataChanged(DataEventBuffer dataEvents) {
    Counter++;
    final List<DataEvent> events = FreezableUtils.freezeIterable(dataEvents);
    dataEvents.close();
    Log.e("List Size: ", String.valueOf(events.size()));
    for (DataEvent event : events) {
        if (event.getType() == DataEvent.TYPE_CHANGED) {
            Log.v("Data is changed", "========================");
            String path = event.getDataItem().getUri().getPath();
            if (SENSOR_DATA_PATH.equals(path)) {
                DataMapItem dataMapItem = DataMapItem.fromDataItem(event.getDataItem());
                fileAsset = dataMapItem.getDataMap().getAsset("File");
                myRunnable = createRunnable();
                if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)
                    new Thread(myRunnable).start();
            }
        }
    }
    status.setText("Received" + " File_"+ String.valueOf(Counter) );
}
@覆盖
公共无效onDataChanged(DataEventBuffer dataEvents){
计数器++;
最终列表事件=FreezableUtils.freezeitrable(dataEvents);
dataEvents.close();
Log.e(“列表大小:”,String.valueOf(events.Size());
用于(数据事件:事件){
if(event.getType()==DataEvent.TYPE\u已更改){
Log.v(“数据已更改”,”========================================”;
字符串路径=event.getDataItem().getUri().getPath();
if(传感器数据路径等于(路径)){
DataMapItem DataMapItem=DataMapItem.fromDataItem(event.getDataItem());
fileAsset=dataMapItem.getDataMap().getAsset(“文件”);
myRunnable=createRunnable();
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)==PackageManager.permission_provided)
新线程(myRunnable.start();
}
}
}
status.setText(“接收的”+“文件”+字符串.valueOf(计数器));
}
就在for循环之前,我检查了事件的大小,它只显示1的大小,不管我保存了多少文件

我被困在如何实现这一点上(tbh我使用了来自youtube视频/在线资源的代码,所以我不能100%确定一些api是如何工作的)


提前谢谢

您将所有文件放在同一路径上,没有任何区别,因此您放入的每个文件都会覆盖以前的文件。在这方面,数据API的工作方式非常类似于文件系统

sendData
方法中,需要编写如下代码:

sensorData = PutDataMapRequest.create(SENSOR_DATA_PATH + '/' + dataFile.toString());
然后在
onDataChanged
中,或者只检查路径前缀

if (path.startsWith(SENSOR_DATA_PATH)) {
…或者,最好将清单声明中的
SENSOR\u DATA\u PATH
值作为数据接收器的
intent过滤器中的
android:pathPrefix
元素。然后可以完全从Java代码中删除路径检查。相关文件如下:

还有一件事:在使用完这些文件后,最好将它们从数据API中清除,这样它们就不会占用空间