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

回主activity的延误

宰父衡
2023-03-14

在主要activity,我称之为本地相机应用程序。那很好。然而,在快门点击后,相机返回到主activity。如果他们的照片拍得正确,那就好了。看起来相机需要一些时间来保存图片,离开相机app导致图片被解除。

不确定我需要做什么才能让相机有足够的时间保存图片!

   /** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        // this device has a camera
        return true;
    } else {
        // no camera on this device
        return false;
    }
}


public void openCamera(View view) {
    Log.i("Camera", "Inside openCamera");
    if ( checkCameraHardware(getApplicationContext())) {
        if ( Build.VERSION.SDK_INT >= 23) {
            if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA)
                    != PackageManager.PERMISSION_DENIED) {
                Intent intentCamera = new Intent("android.media.action.IMAGE_CAPTURE");
                startActivity(intentCamera);
            } else {
                Log.i("Camera", "Camera not permitted");
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 0);
            }
        } else {
            Intent intentCamera = new Intent("android.media.action.IMAGE_CAPTURE");
            startActivity(intentCamera);
        }
    }
}

共有2个答案

丘智志
2023-03-14
I think you should use this api for camera it is easy to use and can solve your issue.

https://github.com/kosalgeek/PhotoUtil

 1. Download PhotoUtil.jar
 2. Copy it and paste into your Android project at App > libs > right click on the jar file and choose Add as Library

**Take a Photo using Camera**
1. Add Permissions
To use the camera, first you need to add permissions in AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ...>
    <uses-feature android:name="android.hardware.camera2" android:required="true"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    ...
</manifest>
2. Dispatch a Camera and Save it to External Storage
2.1. To dispatch a camera and save a photo:
CameraPhoto cameraPhoto = new CameraPhoto(getApplicationContext());
Intent in = cameraPhoto.takePhotoIntent();
startActivityForResult(in, CAMERA_REQUEST);
2.2. To get the photo path
String photoPath = cameraPhoto.getPhotoPath(); //call it in onActivityResult() method
Snippet of code:
//declare them as global variables
CameraPhoto cameraPhoto;
final int CAMERA_REQUEST = 1100;
protected void onCreate(Bundle savedInstanceState) {
  ...
  //initialize it inside onCreate()
  cameraPhoto = new CameraPhoto(getApplicationContext());

  //call it to open the camera
  startActivityForResult(cameraPhoto.takePhotoIntent(), CAMERA_REQUEST);
  cameraPhoto.addToGallery();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode == RESULT_OK){
      if(requestCode == CAMERA_REQUEST){
          String photoPath = cameraPhoto.getPhotoPath();
         try {
              Bitmap bitmap = ImageLoader.init().from(photoPath).requestSize(512, 512).getBitmap();
              imageView.setImageBitmap(bitmap); //imageView is your ImageView
          } catch (FileNotFoundException e) {
              e.printStackTrace();
          }
      }
    }//end if resultCode
}
薛弘阔
2023-03-14

在您的activity片段中尝试这样做。

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

并使用此重写方法取回图像...

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        mImageView.setImageBitmap(imageBitmap);
    }
}

示例示例遵循此链接

有两种意图:

显式意图通过提供目标应用程序的包名或完全限定的组件类名,指定哪个应用程序将满足意图。您通常使用explicit intent在自己的应用程序中启动组件,因为您知道要启动的activity或服务的类名。例如,您可以在应用程序中启动一个新的activity来响应用户的操作,或者启动一个服务来在后台下载文件。

Implicit Intents不命名特定的组件,而是声明要执行的常规操作,这允许来自另一个应用程序的组件处理它。例如,如果您想在地图上向用户显示一个位置,您可以使用一个隐含的意图来请求另一个有能力的应用程序在地图上显示一个指定的位置。更多信息

注意:-图像捕获是隐式意图。您必须使用StartActivityForResult()。它将使用你的操作系统软件app捕捉图像并返回给你的app。

 类似资料:
  • 我正试着从一个广播接收机里启动主activity。我不想提供activity类名,而是使用android的action和category来找出主要的activity。 好像不起作用。 发送代码: 我得到这个错误: 已导致BT:Android.Content.ActivityNotFoundException:未找到处理意图的activity{act=Android.Intent.Action.Ma

  • 本文向大家介绍理解Android中Activity的方法回调,包括了理解Android中Activity的方法回调的使用技巧和注意事项,需要的朋友参考一下 为什么需要方法回调? 方法回调是功能定义和功能分离的一种手段,是一种松耦合的设计思想。在JAVA中回调是通过接口来实现的。作为一种系统架构,必须要有自己的运行环境,并且要提供用户的实现接口。 下面通过实例来模拟一下Android中Activit

  • 在MainActivity中,我有一个TextView。在这个textView中,有一个数字我保留在SharedPreferences中。并且每隔几分钟SharedPreferences就会用一个报警管理器更改一次,但是我的MainActivity中的SharedPreferences不会更改,任何人都知道为什么吗? 这是MainActivity中代码的一部分 这是警报接收器中的代码

  • Flask 的设计原则中有一条是响应对象被创建并在一条可能的回调链中传递,而在 这条回调链但中的任意一个回调,您都可以修改或者替换掉他们。当请求开始被 处理时,还没有响应对象,响应对象将在这一过程中,被某个视图函数或者系统 的其他组件按照实际需要来闯将。 但是,如果您想在响应过程的结尾修改响应对象,但是这是对象还不存在,那么会发生 什么呢?一个常见的例子是您可能需要在 before-request

  • 我有一个RecolyerView,当activity启动时,它工作得很好。当我从那个activity去另一个再回来时,recyclerView是空的。它什么也不显示,但有时它返回值,但布局受到干扰,即项目之间有空隙,或布局将有一个很大的空隙,从activity顶部。 类的代码是: 这是activity首先启动时的影像 在此输入图像说明 这是恢复activity时的形象 在此输入图像说明 日志如下所

  • 延续 让我们回到在第一章中开始的异步回调的例子,但让我稍微修改它一下来画出重点: // A ajax( "..", function(..){ // C } ); // B // A和// B代表程序的前半部分(也就是 现在),// C标识了程序的后半部分(也就是 稍后)。前半部分立即执行,然后会出现一个不知多久的“暂停”。在未来某个时刻,如果Ajax调用完成了,那么程序会回到它刚才离开的