uni-app中UTSAndroid.onAppActivityResult没有执行是怎么回事呢?UTS调用AAR返回没有执行

发布于 1周前 作者 ionicwang 来自 Uni-App

uni-app中UTSAndroid.onAppActivityResult没有执行是怎么回事呢?UTS调用AAR返回没有执行

UTS代码

import Manifest from 'android.Manifest';  
import TargetApi from 'android.annotation.TargetApi';  
import Activity from 'android.app.Activity';  
import Intent from 'android.content.Intent';  
import PackageManager from 'android.content.pm.PackageManager';  
import Bitmap from 'android.graphics.Bitmap';  
import Uri from 'android.net.Uri';  
import AsyncTask from 'android.os.AsyncTask';  
import Build from 'android.os.Build';  
import Bundle from 'android.os.Bundle';  
import MediaStore from 'android.provider.MediaStore';  
import ActivityCompat from 'androidx.core.app.ActivityCompat';  
import FileProvider from 'androidx.core.content.FileProvider';  
import AppCompatActivity from 'androidx.appcompat.app.AppCompatActivity';  
import DisplayMetrics from 'android.util.DisplayMetrics';  
import Log from 'android.util.Log';  
import View from 'android.view.View';  
import ImageView from 'android.widget.ImageView';  
import Toast from 'android.widget.Toast';  
import R from 'uts.sdk.modules.fzImageEdit.R';  

import EditImageActivity from 'com.xinlan.imageeditlibrary.editimage.EditImageActivity';  
import BitmapUtils from 'com.xinlan.imageeditlibrary.editimage.utils.BitmapUtils';  

import File from 'java.io.File';  

export class RHFimage {  
    static getEdit(options : UTSJSONObject, callback : (res: UTSJSONObject ) => void) {  
    let ACTION_REQUEST_EDITIMAGE:Int = 9;  
    let path = options['path'] as string;  
     console.log(path)  
    let outputFile:File = new FileUtils.genEditFile();  
    let savepath = outputFile.getAbsolutePath()  
    console.log(savepath)  
    EditImageActivity.start(UTSAndroid.getUniActivity()!.startActivityForResult,path,savepath,ACTION_REQUEST_EDITIMAGE);  

}  
 }  
 UTSAndroid.onAppActivityResult((requestCode: Int, resultCode: Int, data?: Intent) => {  
     console.log("测试数据")  
     console.log(data)  
     console.log(requestCode)  
     console.log(resultCode)  
    // super.onAppActivityResult(requestCode, resultCode, data);  
    // if(requestCode == RESULT_OK){  
    //   handleEditorImage(data as Intent);  
    // }else{  
        // console.log("保存失败")  
    //  // 别的代码发起的请求,不要处理  
    // }  

 });

下面是JAVA代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
// System.out.println("RESULT_OK");
switch (requestCode) {
case SELECT_GALLERY_IMAGE_CODE://
handleSelectFromAblum(data);
break;
case TAKE_PHOTO_CODE://拍照返回
handleTakePhoto(data);
break;
case ACTION_REQUEST_EDITIMAGE://
handleEditorImage(data);
break;
}// end switch
}
}

4 回复

EditImageActivity.start类里已经封装了startActivityForResult了怎么办呢?EditImageActivity类是封装在AAR里的我看到EditImageActivity类里有这个方法public static void start(Activity context, final String editImagePath, final String outputPath, final int requestCode) { if (TextUtils.isEmpty(editImagePath)) { Toast.makeText(context, R.string.no_choose, Toast.LENGTH_SHORT).show(); return; }

public class EditImageActivity extends BaseActivity {
public static final String FILE_PATH = “file_path”;
public static final String EXTRA_OUTPUT = “extra_output”;
public static final String SAVE_FILE_PATH = “save_file_path”;

public static final String IMAGE_IS_EDIT = "image_is_edit";  

public static final int MODE_NONE = 0;  
public static final int MODE_STICKERS = 1;// 贴图模式  
public static final int MODE_FILTER = 2;// 滤镜模式  
public static final int MODE_CROP = 3;// 剪裁模式  
public static final int MODE_ROTATE = 4;// 旋转模式  
public static final int MODE_TEXT = 5;// 文字模式  
public static final int MODE_PAINT = 6;//绘制模式  
public static final int MODE_BEAUTY = 7;//美颜模式  

public String filePath;// 需要编辑图片路径  
public String saveFilePath;// 生成的新图片路径  
private int imageWidth, imageHeight;// 展示图片控件 宽 高  
private LoadImageTask mLoadImageTask;  

public int mode = MODE_NONE;// 当前操作模式  

protected int mOpTimes = 0;  
protected boolean isBeenSaved = false;  

private EditImageActivity mContext;  
private Bitmap mainBitmap;// 底层显示Bitmap  
public ImageViewTouch mainImage;  
private View backBtn;  

public ViewFlipper bannerFlipper;  
private View applyBtn;// 应用按钮  
private View saveBtn;// 保存按钮  

public StickerView mStickerView;// 贴图层View  
public CropImageView mCropPanel;// 剪切操作控件  
public RotateImageView mRotatePanel;// 旋转操作控件  
public TextStickerView mTextStickerView;//文本贴图显示View  
public CustomPaintView mPaintView;//涂鸦模式画板  

public CustomViewPager bottomGallery;// 底部gallery  
private BottomGalleryAdapter mBottomGalleryAdapter;// 底部gallery  
private MainMenuFragment mMainMenuFragment;// Menu  
public StickerFragment mStickerFragment;// 贴图Fragment  
public FilterListFragment mFilterListFragment;// 滤镜FliterListFragment  
public CropFragment mCropFragment;// 图片剪裁Fragment  
public RotateFragment mRotateFragment;// 图片旋转Fragment  
public AddTextFragment mAddTextFragment;//图片添加文字  
public PaintFragment mPaintFragment;//绘制模式Fragment  
public BeautyFragment mBeautyFragment;//美颜模式Fragment  
private SaveImageTask mSaveImageTask;  

private RedoUndoController mRedoUndoController;//撤销操作  

/**  
 * @param context  
 * @param editImagePath  
 * @param outputPath  
 * @param requestCode  
 */  
public static void start(Activity context, final String editImagePath, final String outputPath, final int requestCode) {  
    if (TextUtils.isEmpty(editImagePath)) {  
        Toast.makeText(context, R.string.no_choose, Toast.LENGTH_SHORT).show();  
        return;  
    }  

    Intent it = new Intent(context, EditImageActivity.class);  
    it.putExtra(EditImageActivity.FILE_PATH, editImagePath);  
    it.putExtra(EditImageActivity.EXTRA_OUTPUT, outputPath);  
    context.startActivityForResult(it, requestCode);  
}<br>

在uni-app开发中,如果遇到UTSAndroid.onAppActivityResult没有执行的问题,通常是因为没有正确处理或接收到从其他应用返回的结果。这种情况常见于涉及到调用其他应用(比如文件选择器、相机等)并期望返回结果的场景。以下是一些可能的代码案例和检查点,帮助你诊断和解决这个问题。

1. 确保正确注册监听器

首先,确保你在调用启动外部活动(Activity)之前已经正确注册了UTSAndroid.onAppActivityResult监听器。

// 注册监听器
UTSAndroid.onAppActivityResult((requestCode, resultCode, data) => {
    if (requestCode === YOUR_REQUEST_CODE) {
        if (resultCode === -1) { // RESULT_OK
            // 处理返回的数据
            console.log(data);
        } else {
            // 处理取消或其他结果
            console.log('Result canceled or error');
        }
    }
});

2. 检查请求码(Request Code)

确保在启动活动时传递的请求码与在监听器中检查的请求码一致。

const YOUR_REQUEST_CODE = 1001; // 自定义请求码

// 启动外部活动,比如打开相机
UTSAndroid.startActivityForResult({
    action: 'android.media.action.IMAGE_CAPTURE', // 例如打开相机
    requestCode: YOUR_REQUEST_CODE,
    // 其他参数...
}, (error) => {
    if (error) {
        console.error('Failed to start activity:', error);
    }
});

3. 检查ActivityResult返回处理

在某些情况下,如果外部活动没有正确设置结果或结果被拦截,也可能导致监听器不执行。确保外部活动在结束时调用了setResult()并传递了正确的数据。

4. 权限和配置检查

  • 确保你的应用有权限启动目标活动。
  • 检查AndroidManifest.xml中是否有必要的配置,特别是涉及到Intent Filter的部分。

5. 调试和日志

  • 使用Android Studio或其他工具查看应用的日志,搜索与Activity Result相关的错误信息。
  • 增加更多的日志输出,帮助你理解活动的生命周期和结果传递过程。

通过上述步骤和代码示例,你应该能够诊断和解决UTSAndroid.onAppActivityResult没有执行的问题。如果问题依然存在,可能需要更深入地检查应用的配置或寻求uni-app社区的帮助。

回到顶部