2013-03-27 15 views
7

Zakodowałem robienie zdjęć i zapisywanie ich w pamięci zewnętrznej. Działa to dobrze na moim tablecie z kartą SD. Mam jednak problemy z telefonem, który nie obsługuje karty SD. Każdy może mi pomóc w zapisywaniu kodów pamięć wewnętrzna. Dzięki!Zapisywanie zdjęcia zrobionego w pamięci wewnętrznej?

((Button) findViewById(R.id.btnTaken)) 
      .setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
          takeImage();        
       } 
       }); 



protected void takeImage() { 
    Log.i(TAG,"onClick event"); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); 
     String currentDateandTime = sdf.format(new Date()); 
     String fileName = Environment.getExternalStorageDirectory().getAbsolutePath() + 
           "/Image_" + currentDateandTime + ".jpg"; 


     mCamera.takePicture(fileName); 
     Toast.makeText(this, fileName + " saved", Toast.LENGTH_SHORT).show(); 


} 
public void takePicture(final String fileName) { 
    Log.i(TAG, "Tacking picture"); 
    PictureCallback callback = new PictureCallback() { 

     private String mPictureFileName = fileName; 

     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 
      Log.i(TAG, "Saving a bitmap to file"); 
      Bitmap picture = BitmapFactory.decodeByteArray(data, 0, data.length); 
      try { 
       FileOutputStream out = new FileOutputStream(mPictureFileName); 
       picture.compress(Bitmap.CompressFormat.JPEG, 90, out); 
       picture.recycle(); 
       mCamera.startPreview(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 

    Camera.ShutterCallback shutter = new Camera.ShutterCallback() { 
     public void onShutter() { 
     Log.e(getClass().getSimpleName(), "SHUTTER CALLBACK"); 
     } 
     }; 
     Camera.PictureCallback raw = new Camera.PictureCallback() { 
      public void onPictureTaken(byte[] data, Camera c) { 
       Log.e(getClass().getSimpleName(), "PICTURE CALLBACK RAW: " + data); 
       mCamera.startPreview(); 
      } 
      }; 
    mCamera.takePicture(shutter, raw, callback) ; 



} 
+0

samo pytanie zostało zadane 30 minut temu http://stackoverflow.com/ques/15662258/how-to-save-a-bitmap-on-internal-storage –

+0

@ user2205173 Sprawdź ten http://connectcoders.blogspot.com/ –

Odpowiedz

-4

Jest to bardzo Simple..Instead zewnętrznej ścieżki pliku name..You powinien dać Internal File Path name..Which jest FileOutputStream out = new FileOutputStream(new File(getFilesDir()+File.separator+"MyFile.jpg")); ..Ple spróbować it..Its pracuje dobrą

i

jeszcze jedna rzecz, należy dodać uprawnienie do pamięci wewnętrznej na Androida manifest.xml złożyć

<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/> 
+2

To uprawnienie nie istnieje, a OutputStream nie jest nazwą pliku . – clemp6r

+0

Jestem również znany o outputstream. To podstawowa kwestia. Z tej zmiennej "out" możesz zapisać dane. Czy wiesz o zapisaniu danych w OutPutStream ??? –

Powiązane problemy