2015-03-17 1 views
0

По существу, я создаю класс камеры, и в классе камеры я призываю использовать камеру для телефонов. Однако я не могу получить и отобразить изображение, потому что я не использую метод startActivityForResult в классе. метод startActivityForResult не работает в моем классе, поэтому вместо этого я использовал метод startActivity. Я попытался создать метод класса, чтобы передать растровое изображение изображений в mainActivity sos, чтобы я мог отображать изображение в изображении, но он не будет работать. Heres мой код, если у вас есть в предложениях к моему вопросу:Их удалять, чтобы получить результат от метода startActivity?

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); 

    } 

} 
+5

Что не работает в отношении startActivityForResult? – zgc7009

+0

Когда я использую startActivityForResult в своем классе. приложение завершается, потому что он не может открыть камеру. Когда я использую startActivity, камера открывается просто отлично. –

+0

По сути, я реализовал пример с этого сайта (http://developer.android.com/training/camera/photobasics.html) в своем классе, и он не будет работать. Однако, когда я реализую его в MainActivity, он отлично работает. –

ответ

1

Вы должны использовать startActivityForResult(intent, requestCode) вместо просто startActivity. Вы будете обрабатывать результат в методе коррекции

onActivityResult() 

См docs для получения полной информации.

Одно из предостережений при обращении с изображениями из камеры в неродном приложении - изображения часто могут превышать ограничение на 16 Мб, предоставляемое неродным приложениям. Это означает, что если вы неправильно масштабируете свои изображения, ваша виртуальная машина закончится без памяти!

0

Вы должны использовать 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.

0

Вы можете использовать singleletone с комбинацией слушателя. Не лучшее решение.

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); 
Смежные вопросы