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

相机意图仅在某些设备上返回null

宋耀
2023-03-14
 imageView.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

            startActivityForResult(cameraIntent, 1);
        }
    });

和onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1 && resultCode == -1) {
        image = (Bitmap) data.getExtras().get("data");
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        // Must compress the Image to reduce image size to make upload easy
        image.compress(Bitmap.CompressFormat.PNG, 50, stream);
        byte[] byte_arr = stream.toByteArray();
        // Encode Image to String
        encodedString = Base64.encodeToString(byte_arr, 0);
        Uri selectedImageUri = data.getData();
        img_path = getRealPathFromURI(selectedImageUri);
      //  Uri tempUri = getImageUri(getApplicationContext(), image);
        imageView.setImageBitmap(image);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    }
}

和错误的堆栈跟踪

stack_trace=java.lang.runtimeException:未能将结果ResultInfo{who=null,request=1,result=-1,data=intent{act=inline-data(havs extras)}}传递到活动{com.madhours/com.madhours.activities.activitySignup}:java.lang.nullpointerException:试图在Android.app.activityThread.DeliverResults(ActivityThread.java:3659)和ythread.Access$1300(ActivityThread.java:155),android.app.activityThread$H.HandleMessage(ActivityThread.java:1366),android.os.handler.dispatchMessage(handler.java:102),android.os.handler.dispatchMessage(handler.java:135),android.os.handler.dispatchMessage(handler.java:135),android.app.activityThread.main(it.java:905)在com.android.internal.os.zygoteinit.main(zygoteinit.java:700)原因:java.lang.nullpointerException:试图在:3655)...10个更多的java.lang.nullPointerException:试图在com.madhours.activities.activitySignup.GetRealPathFroMuri在Android.app.ActivityThread.Access$1300(ActivityThread.java:155)在Android.app.ActivityThread.$H.HandleMessage(ActivityThread.java:1366)在Android.os.handler.DispatchMessage(handler.java:102),android.os.handler.dispatchMessage(handler.java:135),android.app.activityThread.loop(handler.java:135),android.app.activityThread.main(al.os.zygoteinit$methodandargscaller.run(zygoteinit.java:905),地址为com.android.internal.os.zygoteinit.main(zygoteinit.java:700)

共有1个答案

微生青青
2023-03-14

这里会有什么问题?

问题是您正在对返回的intent调用getData()。返回URI不是action_media_store协定的一部分:

调用方可能会传递额外的EXTRA_OUTPUT,以控制将此图像写入的位置。如果EXTRA_OUTPUT不存在,则在额外字段中返回一个小尺寸图像作为位图对象。这对于只需要一个小图像的应用程序很有用。如果EXTRA_OUTPUT存在,那么全尺寸图像将被写入EXTRA_OUTPUT的Uri值。

/***
 Copyright (c) 2008-2016 CommonsWare, LLC
 Licensed under the Apache License, Version 2.0 (the "License"); you may not
 use this file except in compliance with the License. You may obtain a copy
 of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required
 by applicable law or agreed to in writing, software distributed under the
 License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied. See the License for the specific
 language governing permissions and limitations under the License.

 From _The Busy Coder's Guide to Android Development_
 https://commonsware.com/Android
 */

package com.commonsware.android.camcon;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import java.io.File;

public class CameraContentDemoActivity extends Activity {
  private static final String EXTRA_FILENAME=
    "com.commonsware.android.camcon.EXTRA_FILENAME";
  private static final String FILENAME="CameraContentDemo.jpeg";
  private static final int CONTENT_REQUEST=1337;
  private File output=null;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    if (savedInstanceState==null) {
      File dir=
        Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);

      dir.mkdirs();
      output=new File(dir, FILENAME);
    }
    else {
      output=(File)savedInstanceState.getSerializable(EXTRA_FILENAME);
    }

    if (output.exists()) {
      output.delete();
    }

    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output));

    startActivityForResult(i, CONTENT_REQUEST);
  }

  @Override
  protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    outState.putSerializable(EXTRA_FILENAME, output);
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode,
                                  Intent data) {
    if (requestCode == CONTENT_REQUEST) {
      if (resultCode == RESULT_OK) {
        Intent i=new Intent(Intent.ACTION_VIEW);

        i.setDataAndType(Uri.fromFile(output), "image/jpeg");
        startActivity(i);
        finish();
      }
    }
  }
}
 类似资料:
  • 我的Android应用程序无法安装在一些“随机”、较旧的API设备上(任何低于API级别25的设备),错误如下: 所以,基本上看起来… API 我见过类似的问题,答案与小写的包名有关。我已经有了。 有人有什么想法吗? 舱单: BTW我用的是Visual Studio 2019和一夫一妻制3.7

  • 我试图在我的应用程序中解码AAC编码的文件,并初始化用于初始化我的对象的对象,这是为对象设置变量的代码 我面临的问题是语句为某些设备上的同一文件获取我。该应用程序正在生产中,我在android API级别为17、18和19的处理器设备上看到了这个错误,大多数错误都发生在三星设备上。有什么方向吗?

  • 问题内容: 我看到Google Play中与Fabric / Crashlytics相关的崩溃。从正常的Crashlytics更新到新的Fabric Crashlytics之后,发生了这种情况。我只能在其中一台设备(Galaxy S2)上重现它。我拥有的所有其他设备(Nexus 5和S4)都没有崩溃。这是堆栈跟踪: 这是我的build.gradle的内容: 问题答案: 我只是凭直觉就知道了!升级到

  • 问题内容: 我正在尝试获取文件的大小,然后再下载。我曾经这样做,它在我的家用计算机Android 2.1 Emulator上运行良好。 但是,一旦我从手机(WiFi或3G)运行我的应用程序,该功能将无法使用,而当我从工作笔记本电脑的Android 2.1仿真器中运行该应用程序时,它也将无法使用。 有谁知道解决方法?还有另一种方法可以获取文件的大小,而无需使用。 问题答案: 此信息并非始终可用。通常

  • 我正试着拍一张照片并把它保存到一个自定义的位置- onActivityResult()中的数据为空。我错过了什么?

  • 在使用以下方法积极创建OpenGL和OpenCL之间的共享上下文后: 然而,当尝试它在东芝笔记本电脑上与英特尔HD Graphics 520在Manjaro操作系统和Beignet OpenCL实现。clCreateFromGLTexture(...)返回CL_INVALID_CONTEXT失败,此外,我尝试了使用Intel SDK和Beignet OpenCl的Ubuntu16.04和Intel