【问题标题】:Is their away to get a result from the startActivity method?他们是否要从 startActivity 方法中获得结果?
【发布时间】:2015-03-17 22:39:21
【问题描述】:

本质上,我正在创建一个相机类,并且在相机类中我正在调用使用手机相机的意图。但是,我无法获取和显示图片,因为我没有在类中使用 startActivityForResult 方法。 startActivityForResult 方法在我的班级中不起作用,所以我改用 startActivity 方法。我尝试创建一个类方法将图片的位图传递给 mainActivity 所以我可以在 imageview 中显示图像,但它不会工作。如果您对我的问题有任何建议,这是我的代码:

import java.io.File;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.os.Bundle;


public class cameraLIBRARY{

    private final Context mContext;
    private Bitmap imageBitmap;
    private Bundle Bundle;

    public static String logtag = "Cam";
    private static int PICTURE = 1;
    private Uri imageUri;

    //class constructor
    public cameraLIBRARY(Context context){
        this.mContext = context;
    }

    public void takePhoto(View v) {

        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");

        File photo = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "pic.jpg");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
        imageUri = Uri.fromFile(photo);

        mContext.startActivity(intent);

    }

}

【问题讨论】:

  • startActivityForResult 有什么问题?
  • 当我在课堂上使用 startActivityForResult 时。该应用程序终止,因为它无法打开相机。当我使用 startActivity 时,相机打开就好了。
  • 基本上,我在自己的课堂上实现了这个网站(developer.android.com/training/camera/photobasics.html)中的示例,但它不会工作。但是,当我在 MainActivity 中实现它时,它工作正常。

标签: android android-camera-intent


【解决方案1】:

您应该使用startActivityForResult(intent, requestCode) 而不仅仅是 startActivity。您将在覆盖方法中处理结果

onActivityResult()

查看docs了解完整详情。

在非原生应用中处理来自相机的图像时要注意一点 - 图像通常会超过为非原生应用提供的 16Mb 限制。这意味着如果您没有正确缩放图像,您的虚拟机将耗尽内存!

【讨论】:

    【解决方案2】:

    你必须像这样使用 startActivity 来获得结果

    startActivityForResult(intent , 2);
    

    然后重写 onActivityResult 方法,您是否像这样编写代码:

     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        if(requestCode == 2)
        {
        if (resultCode == RESULT_OK) 
        {
                    // Your code here ...
                }
    
            }
        }
    

    希望对您有所帮助,如需进一步帮助,请阅读 android 文档。

    【讨论】:

      【解决方案3】:

      您可以将单音与侦听器组合使用。不是最好的解决方案。

      public class DataTransfer {
          private static DataTransfer instance;
          private DataTransferListener listener;
          private DataTransfer(){
      
          }
      
          public DataTransfer getInstance(){
              if(instance == null)
                  instance = new DataTransfer();
              return instance;
          }
      
          public void setDataTransferListener(DataTransferListener listener){
              this.listener = listener;
          }
      
          public void sendMessage(Object obj){
              if(listener != null)
                  listener.onDataReceived(obj);
          }
      }
      
      public interface DataTransferListener{
          void onDataReceived(Object obj);
      }
      

      然后只需在您的活动中实现 DataTransferListener 并调用:

      DataTransfer.getInstanse().setDataTransferListener(this);
      

      然后你可以从你想要的地方打电话

      DataTransfer.getInstanse().sendMessage(Object); 
      

      注意内存泄漏。调用 onDestroy()

      DataTransfer.getInstanse().setDataTransferListener(null);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-11
        • 2013-01-12
        • 1970-01-01
        • 1970-01-01
        • 2015-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多