package com.cmmboy.xzwp.ability;
import com.bumptech.glide.Glide;
import com.cmmboy.xzwp.ResourceTable;
import com.cmmboy.xzwp.bean.ImageBean;
import com.cmmboy.xzwp.net.RetrofitManagement;
import com.cmmboy.xzwp.net.Wan;
import com.cmmboy.xzwp.utils.LogUtils;
import ohos.aafwk.ability.DataAbilityHelper;
import ohos.aafwk.ability.DataAbilityRemoteException;
import ohos.aafwk.ability.fraction.FractionAbility;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.agp.components.*;
import ohos.agp.utils.Color;
import ohos.agp.window.service.Window;
import ohos.app.Context;
import ohos.data.resultset.ResultSet;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.media.image.ImageSource;
import ohos.media.photokit.metadata.AVStorage;
import ohos.utils.net.Uri;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import java.io.File;
import static ohos.bundle.IBundleManager.PERMISSION_GRANTED;
public class AboutAbility extends FractionAbility {
static final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x0001, "选择图片测试");
Image image;
private final int imgRequestCode = 1123;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_about);
Window window = getWindow();
window.setStatusBarColor(Color.rgb(26, 159, 53));
window.setStatusBarVisibility(Component.VISIBLE);
Image backView = findComponentById(ResourceTable.Id_backView);
Text title = findComponentById(ResourceTable.Id_title);
title.setText("关于");
backView.setClickedListener(component -> terminateAbility());
image = findComponentById(ResourceTable.Id_test);
requestPermissionsFromUser(new String[]{"ohos.permission.READ_USER_STORAGE"}, imgRequestCode);
image.setClickedListener(component -> {
choosePic();
});
}
@Override
public void onRequestPermissionsFromUserResult(int requestCode, String[] ss, int[] grantResults) {
super.onRequestPermissionsFromUserResult(requestCode, ss, grantResults);
if (requestCode != 0) {
choosePic();
return;
}
boolean isHavePermission = false;
for (int num = 0; num < ss.length; num++) {
isHavePermission = grantResults[num] == PERMISSION_GRANTED;
}
if (isHavePermission) {
restart();
}
}
private void choosePic() {
Intent intent = new Intent();
Operation opt = new Intent.OperationBuilder().withAction("android.intent.action.GET_CONTENT").build();
intent.setOperation(opt);
intent.addFlags(Intent.FLAG_NOT_OHOS_COMPONENT);
intent.setType("image/*");
startAbilityForResult(intent, imgRequestCode);
}
@Override
protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
if (resultData != null && requestCode == imgRequestCode) {
String chooseImgUri = resultData.getUriString();
HiLog.info(label, "选择图片getScheme:" + chooseImgUri.substring(chooseImgUri.lastIndexOf('/')));
DataAbilityHelper helper = DataAbilityHelper.creator(getContext());
ImageSource imageSource = null;
String chooseImgId = null;
if (chooseImgUri.lastIndexOf("%3A") != -1) {
chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf("%3A") + 3);
} else {
chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf('/') + 1);
}
Uri uri = Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, chooseImgId);
HiLog.info(label, "选择图片dataability路径:" + uri.toString());
Glide.with(AboutAbility.this)
.load(uri.toString())
.into(image);
String imagePath = searchImages(AboutAbility.this, uri);
HiLog.info(label, "选择图片imagePath路径:" + imagePath);
getNewsNet(imagePath);
}
}
private static String searchImages(Context context, Uri contentUri) {
DataAbilityHelper helper = DataAbilityHelper.creator(context);
ResultSet resultSet = null;
try {
resultSet = helper.query(contentUri, new String[]{AVStorage.Images.Media.ID, AVStorage.Images.Media.DISPLAY_NAME, AVStorage.Images.Media.DATA}, null);
int columnIndexForName = resultSet.getColumnIndexForName(AVStorage.Images.Media.DATA);
resultSet.goToFirstRow();
return resultSet.getString(columnIndexForName);
} catch (DataAbilityRemoteException e) {
e.printStackTrace();
} finally {
if (resultSet != null) {
resultSet.close();
}
}
return null;
}
private void getNewsNet(String imgPath) {
LogUtils.d("上传的文件名: " + imgPath);
File file = new File(imgPath);
RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Builder builder = new MultipartBody.Builder()
.setType(MultipartBody.FORM);
builder.addFormDataPart("file", file.getName(), body);
MultipartBody.Part part = builder.build().part(0);
RetrofitManagement.getInstance().create(Wan.class).uploadFiles(part).enqueue(new Callback<ImageBean>() {
@Override
public void onResponse(Call<ImageBean> call, Response<ImageBean> response) {
if (response.body().getCode() == 200) {
HiLog.info(label, "上传图片返回的数据===>" + response.body().getImgUrl());
} else {
}
}
@Override
public void onFailure(Call<ImageBean> call, Throwable throwable) {
}
});
}
}