繁体   English   中英

我不明白 startActivityForResult

[英]I don't understand startActivityForResult

我是编程新手,我需要学习学校的课程,但我遇到了一个问题,它不允许我在 android 工作室及其中上传图片

startActivityForResult

这是代码

imgProfile.setOnClickListener(new View.OnClickListener() {
        @Override
    public void onClick(View view) {
          Intent photoIntent = new Intent(Intent.ACTION_PICK);
            photoIntent.setType("Image/*");
            //noinspection deprecation
            startActivityForResult(photoIntent, 1);
        }
    });





}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 1 && resultCode == RESULT_OK && data!=null ){

        imagePath = data.getData();
        getImageInImageView();
    }
}

我试图查看 inte.net,但找不到任何解决方案,任何人都可以帮助我

需要注意的一些事项:

  • 自 API 30 起,这种相互通信方式已被弃用。
  • Sotrage 访问基础设施发生了变化,必须采取特定步骤才能获得常规的内部存储访问权限。 因此,除非我们使用 MediaStore、ROOM 或 SAF,否则在大多数情况下我们会得到NullPointerException 或请求的存储位置只会在我们的 com.appd.app 的文件目录中创建一个同名目录,所有交互都将从该源完成。

无论如何,当前从称为 Activity 获取输入的方法:

进口
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
联络员 object
ActivityResultLauncher<Intent> activityForResultLauncher;
activityForResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>()
{
    @Override
    public void onActivityResult(ActivityResult result)
    {
        if(result.getResultCode() == RESULT_OK)
        {
            Intent data = result.getData();

            // handle business...
        }
    }
});
  • 上述代码的 LAMBDA 变体
    ActivityResultLauncher<Intent> activityForResultLauncher; activityForResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result-> { if(result.getResultCode() == RESULT_OK) { intentData = result.getData(); // handle business... } });
启动阶段
  • 然后只需要使用 object 来处理通讯
    activityForResultLauncher.launch(someIntent);
  • 通常,当我在那里完成我的工作并在其上调用finish()时,我会从调用的 Activity 返回RESULT_OK 然后我回到调用方Activity,我们可以继续在我们覆盖的onActivityResult方法部分继续。
  • 不再需要旧方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM