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

onActivityForResult数据为空

阙俊友
2023-03-14

最近,我用Android7.0及更高版本更新了一个项目。我搞清楚提供者的问题了。

当我拍摄照片并使用onActivityForResult来调整图像大小或显示它时。我发现数据为空。我想知道为什么?我尝试了几种获取URI的方法

 //A button click to call this.
        Uri tempUri;
        private void takePhoto() {
            if (isSdcardExisting()) {
                //create a file.
                File file = new File(getExternalFilesAbsolutePath(this),HERO_IMAGE);
                if(file.exists()){
                    try {
                        file.delete();
                        file.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                //use a class to deal uri problem android 7.0 problem.
                Uri uri = FileProvider7.getUriForFile(this,file);
                Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");
                //put some keys to intent 
                cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
                cameraIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
                /*
                 * grant uri
                 * 
                 * the temp sulution : 
                 * tempUri = uri;
                 */
                FileProvider7.grantUriPermission(this,cameraIntent,uri);
                startActivityForResult(cameraIntent, CODE_TAKE_PHOTO);
            } else {
                Toast.makeText(this, "请插入SD卡", Toast.LENGTH_LONG)
                        .show();
            }

        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            if(resultCode != RESULT_OK){
                return;
            }else{
                switch (requestCode){
                    case CODE_TAKE_PHOTO:
                        /**
                         * the requestCode and resultCode is right,but the data is null
                         * I wander how to use this.
                         * 
                         * the temp solution is to define a Uri obejct to store the uri.
                         * 
                         * if(tempUri != null)
                         *      resize(tempUri);
                         */
                        Log.d(TAG, "onActivityResult: data ---> " + data);
                        if(data != null){
                            Bundle bundle = data.getExtras();
                            Log.d(TAG, "onActivityResult: bundle ---> " + bundle);
                            if(bundle != null){
                                Uri resizeUri = bundle.getParcelable(MediaStore.EXTRA_OUTPUT);
                                Log.d(TAG, "onActivityResult: resizeUri ---> " + resizeUri);
                                String imageType = bundle.getString("outputFormat");
                                Log.d(TAG, "onActivityResult: imageType ---> " + imageType);
                                Uri uri = data.getData();
                                Log.d(TAG, "onActivityResult: getData --->  " + uri);
                                resize(resizeUri);
                            }
                        }
                        break;

                    case CODE_SHOW_IMAGE:
                        break;
                }
            }
            super.onActivityResult(requestCode, resultCode, data);
        }
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.rambopan.demotryusercamera">

    <uses-permission android:name="android.permission.CAMERA"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <action android:name="com.android.camera.action.CROP"/>
                <action android:name="android.media.action.IMAGE_CAPTURE"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.FileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

    </application>

</manifest>
06-12 15:26:11.063 368-368/com.rambopan.demotryusercamera D/XADAX.FileProvider7: getUriForFile: ---> file:///storage/emulated/0/Android/data/com.rambopan.demotryusercamera/files/hero
06-12 15:26:32.624 368-368/com.rambopan.demotryusercamera D/XADAX.MainActivity: onActivityResult: data ---> null

共有1个答案

何玉韵
2023-03-14

您可以从cameraintent.putextra(mediastore.extra_output,uri)中发送的uri变量获取图像;

 类似资料:
  • 我有一个超过5000个字符的字符串,我想用MyBatis将其保存为XMLTYPE。为此,我做了以下工作: 我在将字符串转换为CLOB时遇到了问题。 如果以第一种方式进行,则创建的CLOB对象是一个SerialClob有3个字段:BUF、LENG和CLOB;但是在这三个字段中,只有两个字段被填充:BUF(buffer)和LENG,但是CLOB是null。 但是如果我用第二种方法来做,我就创建了完整的

  • 回调类APIInterface 得到回应

  • 问题内容: 我想将Redis用作数据库,而不是缓存。根据我的(有限的)理解,Redis是一个内存数据存储。使用Redis有什么风险,如何减轻它们? 问题答案: 您可以通过多种不同方式将Redis用作权威存储: 打开 AOF (仅附加文件存储),请参阅AOF文档。这将实时记录针对您的数据集执行的所有Redis命令的日志。 使用主从复制运行Redis,请参阅复制文档。如果您的一个实例发生故障,这将使您

  • 我想预测具有以下形式的数据分类: 分类器;文本描述 null

  • 问题内容: 我的理解是,对于Spring数据JPA,我无法使用查询方法来获取列等于给定非空方法参数的所有行,而当方法参数为null时,无法使用相同的方法来获取此列为NULL的所有行。 。 那是对的吗? 因此,我必须在我的JAVA代码中对此进行区分,并且必须使用单独的查询方法明确要求空值,如下面的示例所示? 不好的是,如果我有4个可以为null的参数,并且必须编写16种不同的查询方法。 问题答案:

  • 问题内容: 我希望从该网站的mma 数据中抓取数据并解析一些highcharts表。我单击的链接与selenium,然后切换到图表。我转到该站点,然后在Artem Lobov行的Pinnacle列中单击+420。这将创建一个弹出图表。然后,我切换到活动元素。我想捕获由highcharts绘制的图形以响应点击。 我以以下方式使用selenium: 我能够单击链接并获得图表,但我对highcharts