2012-01-03 15 views
7

अद्यतनएसडी कार्ड

जोड़ा गया

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

प्रकट सब अब ठीक काम करता है के लिए करने के लिए छवि एंड्रॉयड सहेजें।

ठीक है तो मेरे पास एक ऐप है जिसे मैंने बनाना शुरू कर दिया है, अंत में मैं एक तस्वीर लेने में सक्षम होना चाहता हूं, जो आपको दूसरी स्क्रीन पर ले जाता है जो आपको "उपयोग" या "रीटैक" करने में सक्षम बनाता है। चित्र।

जब छवि ली जाती है तो इसे एसडी कार्ड पर एक नए फ़ोल्डर में सहेजने की आवश्यकता होती है, (यदि फ़ोल्डर वहां नहीं है तो उसे इसे बनाना होगा)। मेरे पास यह सब कुछ हफ्ते पहले काम कर रहा था, लेकिन जब मैंने कुछ संपादन किया और ग्रहण बंद कर दिया तो मुझे लगता है कि मैं इसे वापस काम नहीं कर सकता?

इसके लिए अनुभाग int imageNum = 0; के बाद है, मैंने imagesFolder.mkdirs(); जोड़ा है जो मैं एक नया फ़ोल्डर बनाने के लिए सही है लेकिन यह अब भी काम नहीं कर रहा है।

अब छवि को अभी लिया जाता है और न ही नया फ़ोल्डर बनाया जाता है या छवि सहेजी जाती है।

public class AndroidCamera extends Activity implements SurfaceHolder.Callback { 

Camera camera; 
SurfaceView surfaceView; 
SurfaceHolder surfaceHolder; 
boolean previewing = false; 
LayoutInflater controlInflater = null; 

final int RESULT_SAVEIMAGE = 0; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    getWindow().setFormat(PixelFormat.UNKNOWN); 
    surfaceView = (SurfaceView) findViewById(R.id.camerapreview); 
    surfaceHolder = surfaceView.getHolder(); 
    surfaceHolder.addCallback(this); 
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    controlInflater = LayoutInflater.from(getBaseContext()); 
    View viewControl = controlInflater.inflate(R.layout.control, null); 
    LayoutParams layoutParamsControl = new LayoutParams(
      LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    this.addContentView(viewControl, layoutParamsControl); 

    Button buttonTakePicture = (Button) findViewById(R.id.takepicture); 
    buttonTakePicture.setOnClickListener(new Button.OnClickListener() { 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      camera.takePicture(myShutterCallback, myPictureCallback_RAW, 
        myPictureCallback_JPG); 

     } 
    }); 
} 

ShutterCallback myShutterCallback = new ShutterCallback() { 

    public void onShutter() { 
     // TODO Auto-generated method stub 

    } 
}; 

PictureCallback myPictureCallback_RAW = new PictureCallback() { 

    public void onPictureTaken(byte[] arg0, Camera arg1) { 
     // TODO Auto-generated method stub 

    } 
}; 

PictureCallback myPictureCallback_JPG = new PictureCallback(){ 

    public void onPictureTaken(byte[] arg0, Camera arg1) { 
     // TODO Auto-generated method stub 
     /*Bitmap bitmapPicture 
      = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); */ 


     int imageNum = 0; 
     Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     File imagesFolder = new File(Environment.getExternalStorageDirectory(), "BeatEmUp"); 
     imagesFolder.mkdirs(); 
     String fileName = "image_" + String.valueOf(imageNum) + ".jpg"; 
     File output = new File(imagesFolder, fileName); 
     while (output.exists()){ 
      imageNum++; 
      fileName = "image_" + String.valueOf(imageNum) + ".jpg"; 
      output = new File(imagesFolder, fileName); 
     } 
     Uri uriSavedImage = Uri.fromFile(output); 
     imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 


     OutputStream imageFileOS; 
     try { 
      imageFileOS = getContentResolver().openOutputStream(uriSavedImage); 
      imageFileOS.write(arg0); 
      imageFileOS.flush(); 
      imageFileOS.close(); 

      Toast.makeText(AndroidCamera.this, 
        "Image saved: ", 
        Toast.LENGTH_LONG).show(); 

     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     camera.startPreview(); 
    }}; 


public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
    // TODO Auto-generated method stub 
    if (previewing) { 
     camera.stopPreview(); 
     previewing = false; 
    } 

    if (camera != null) { 
     try { 
      camera.setPreviewDisplay(surfaceHolder); 
      camera.startPreview(); 
      previewing = true; 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

public void surfaceCreated(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 

    camera = Camera.open(); 
    try { 
     Camera.Parameters parameters = camera.getParameters(); 
     if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { 
      // This is an undocumented although widely known feature 
      parameters.set("orientation", "portrait"); 
      // For Android 2.2 and above 
      camera.setDisplayOrientation(90); 
      // Uncomment for Android 2.0 and above 
      parameters.setRotation(90); 
     } else { 
      // This is an undocumented although widely known feature 
      parameters.set("orientation", "landscape"); 
      // For Android 2.2 and above 
      camera.setDisplayOrientation(0); 
      // Uncomment for Android 2.0 and above 
      parameters.setRotation(0); 
     } 
     camera.setParameters(parameters); 
     camera.setPreviewDisplay(holder); 
    } catch (IOException exception) { 
     camera.release(); 

    } 
    camera.startPreview(); 

} 

public void surfaceDestroyed(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 
    camera.stopPreview(); 
    camera.release(); 
    camera = null; 
    previewing = false; 
} 
} 
+2

आप त्रुटि के किसी भी प्रकार हो रही है? क्या आपकी मेनिफेस्ट एसडी कार्ड को लिखने की अनुमति देता है? –

+0

धन्यवाद मूर्खतापूर्ण गलती मैनिफेस्ट में अनुमतियां नहीं जोड़ रही है :) – Matt

+0

क्या आप इसे उत्तर के रूप में जोड़ना चाहते हैं तो मैं स्वीकार कर सकता हूं, यह अन्य उपयोगकर्ताओं की सहायता कर सकता है। – Matt

उत्तर

8

आप प्रकट सूचियों को SD कार्ड पर लिखने की अनुमति यह सुनिश्चित करना चाहिये:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
संबंधित मुद्दे