当前位置: 首页 > 知识库问答 >
问题:

从库返回后,不调用片段中的onActivityResult

罗昕
2023-03-14

在我片段中,我从图库中选择了照片

在manifest.xml中

   <uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_GPS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在此之前,我的应用程序显示权限对话框。我按允许

public class EditProfileFragment extends androidx.fragment.app.Fragment {
 private void choosePhotoFromGallery() {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, SELECT_PHOTO);
}
 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (BuildConfig.DEBUG)
            Log.d(TAG, "onActivityResult_requestCode = " + requestCode + ", resultCode = " + resultCode + ", data = "
                    + AndroidUtil.intent2String(data));

此处请求权限对话框:

  private boolean checkAndRequestPermissions() {
        int writeExternalStorage = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
        int readExternalStorage = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE);
        int camera = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA);
        List<String> listPermissionsNeeded = new ArrayList<>();
        if (writeExternalStorage != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
        if (readExternalStorage != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
        }
        if (camera != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(Manifest.permission.CAMERA);
        }
        if (BuildConfig.DEBUG)
            Log.d(TAG, "checkAndRequestPermissions_listPermissionsNeeded(" + listPermissionsNeeded.size() + ")");
        if (!listPermissionsNeeded.isEmpty()) {
            if (BuildConfig.DEBUG)
                Log.d(TAG, "checkAndRequestPermissions_REQUEST_WRITE_EXTERNAL_STORAGE_REQ_CODE");
            ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()])
                    , WRITE_EXTERNAL_STORAGE_REQ_CODE);
            return false;
        }
        return true;
    }

共有1个答案

黄意智
2023-03-14

将此放入活动结果的活动中

   Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frameLayout);
        fragment.onActivityResult(requestCode, resultCode, data);

它将做的是将该片段称为您的片段的onActivityResult。因此您将在片段中包含选择数据

结果的内部片段启动活动

getActivity().startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);


   @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frameLayout);
        fragment.onActivityResult(requestCode, resultCode, data);
    }
 @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        //  super.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "Activit Result");
        if (resultCode == -1) {
        }
}
 类似资料:
  • 我正在开发一个android应用程序,它有一个活动。该活动有一个ViewPager,它使用FragmentStatePagerAdapter加载两个片段。 正在活动的onResume方法上重新创建此适配器。 那是内存溢出错误吗?为什么getActivity()方法在片段似乎被正确加载的情况下返回null? 提前谢谢你

  • 嗨,我在主片段内使用带有碎片网的viewPager。我试图从画廊或相机中获取图像到位图,但在选择照片并启动ActivityForResult后,它不会在onActivityResult中捕获... 以下是我如何调用startActivityForResult: 这是我的onActivityResult: 有什么想法吗?

  • 正如您在onCreate方法中看到的,我在“片段”列表的第0个片段上调用了getView。它返回null。我试着在代码中加入一个计时器,让它每秒运行一次,并检查视图是否为空。在计时器的第二个滴答声中,视图不为空。大体上 主要活动。JAVA 空白碎片。JAVA

  • 我正在尝试将Map放入一个片段中。我正在粘贴我正在使用的代码 XML 下面是我声明的片段名称 下面是我如何初始化地图 这个方法是在onCreateView上调用的 错误是 请帮助解决此问题。问题在下面部分 编辑1 将xml更改为 和 和初始化 但同样的错误是 这发生在排队的时候 为什么会发生这种情况?? 编辑2 对getmap已弃用。所以我试过了 和 以及回调。。 和setUpMap方法 错误显示

  • 我有一个包含框架布局的活动,片段A托管在这里与一起。 此片段A托管了另外两个包含回收器视图的片段——使用< code > fragmentstatepageradar 的片段A1和片段A2。此时,我能够在片段A1和A2中使用< code > getSupportFragmentManager()获得父片段。 单击A1和A2中的回收器视图项会产生另一个片段,比如片段B,它会替换片段A并将其添加到ba

  • 下面的代码在活动中运行良好,但我不能使它在片段中工作。 从不调用。