2010-12-30 2 views
2

Я интегрируя точный код здесь: http://labs.makemachine.net/2010/03/simple-android-photo-capture/Android 2.2 SDK - Фотоцентр пример не работает

Как деятельность должна работать: нажмите кнопку «» -> перейти по умолчанию камеры. Фотографировать. Кнопка «Retake» работает, кнопка «отменить» работает (возвращается к макету «кнопка»), но кнопка «ok» не работает (и затем изображение должно появляться над «кнопкой» в предыдущем макете). Связано ли это с тем, как он сохраняет изображение на SD-карту? Я не могу понять это! Кроме того, я тестирую это приложение на устройстве.

ответ

1

Понял работать:

package com.android.xxx; 

import java.io.File; 

import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.view.Window; 

public class CameraView extends MenusHolder { 

    protected String _path; 
    protected boolean _taken; 

    protected static final String PHOTO_TAKEN = "photo_taken"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.create_event_view); 

     File imageDirectory = new File(Environment.getExternalStorageDirectory() + "/MyFolder/"); 
     imageDirectory.mkdirs(); 

     _path = Environment.getExternalStorageDirectory() + "/MyFolder/temporary_holder.jpg"; 

     startCameraActivity(); 

    } 

    protected void startCameraActivity() { 

     File file = new File(_path); 
     Uri outputFileUri = Uri.fromFile(file); 

     Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 

     startActivityForResult(intent, 0); 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     switch(resultCode) { 

      case 0: 
       finish(); 
       break; 

      case -1: 
       onPhotoTaken(); 
       break; 

     } 

    } 

    protected void onPhotoTaken() { 

     _taken = true; 
     finish(); 
     Intent newView1 = new Intent(CameraView.this, CreateEventView.class); 
     CameraView.this.startActivity(newView1); 

    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 

     outState.putBoolean(CameraView.PHOTO_TAKEN, _taken); 

    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 

     if (savedInstanceState.getBoolean(CameraView.PHOTO_TAKEN)) { 

      onPhotoTaken(); 

     } 

    } 

} 
+0

Еще одна вещь, которую нужно будет включать <использует-разрешение андроида: имя = «android.permission.WRITE_EXTERNAL_STORAGE» /> в манифесте, так что вы можете создать новый каталог. – Rydell

Смежные вопросы