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中清除,这样它们就不会占用空间