2013-10-01 68 views
-1

正试图在SD卡上创建一个文件夹并将所有图像保存在那里,而不是在内部存储器上。将图像保存到SD卡文件夹

public class CameraActivity extends Activity { 

    private static final int CAMERA_PIC_REQUEST = 1111; 
    private ImageView mImage; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mImage = (ImageView) findViewById(R.id.result); 
     //1 
     Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     File image = new File(Environment.getExternalStorageDirectory()+File.separator +"mypics"); 
    Uri fileUri = Uri.fromFile(image); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

     startActivityForResult(intent, CAMERA_PIC_REQUEST); 
    } 


    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_PIC_REQUEST) { 
      //2 
      Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
      EditText etext = (EditText) findViewById(R.id.editTextLocation); 
      Toast.makeText(getBaseContext(), data.getExtras().get("data").toString(), Toast.LENGTH_LONG).show(); 
      mImage.setImageBitmap(thumbnail); 
      etext.setText(data.getExtras().get("data").toString()); 
      //3 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      //4 
      String state=Environment.getExternalStorageState(); 
      Toast.makeText(getBaseContext(), state, Toast.LENGTH_LONG).show(); 
      File file = new File(Environment.getExternalStorageDirectory()+File.separator +"mypics"); 
      if(!file.exists()) 
       if(file.mkdirs()) 
        Log.v("Mobitracker","success"); 

      if (Environment.MEDIA_MOUNTED.equals(state)) 
       Toast.makeText(getBaseContext(), "Yes its read only", Toast.LENGTH_LONG).show(); 
      if (Environment.isExternalStorageRemovable()) 
       Toast.makeText(getBaseContext(), "Yes its internal card", Toast.LENGTH_LONG).show(); 

      //Create New file and name it Image2.PNG 
      File file1 = new File(file, "Image2.PNG"); 
      try { 
       file1.createNewFile(); 
       FileOutputStream fo = new FileOutputStream(file1); 
       //5 
       fo.write(bytes.toByteArray()); 
       fo.flush(); 
       fo.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     else 
      Toast.makeText(getBaseContext(), "Please take snap again", Toast.LENGTH_LONG).show(); 
    } 
} 

这是我的代码,我尝试了很多东西,但仍然不可能保存在internalmemory DCIM文件夹中为什么?

作为

我得到的输出装 是它的只读

我不连接到系统但还是同样的问题,我甚至尝试重新启动手机和所有,但仍然相同。 我使用的是索尼xperia tipo mobile 4.0.4 os。

请帮我沮丧我试过所有的线程。

你们能帮助我,请

我的权限是

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

而且我也能看到位图图像图像视图,但 Toast.makeText(getBaseContext(),data.getExtras()。获得( “数据”)的toString(),Toast.LENGTH_LONG).show()。

正在恢复一些[email protected]一些事情

+0

您是否在清单文件中指定了相关权限? – GrIsHu

+0

http://android-spirit.blogspot.in/2013/07/camera-intent-in-android.html – Nirmal

+0

是的,我有指定的权限 –

回答

0

您应该使用的OutputStream写的内容。请致电here寻求帮助。

或者做类似的信息(见here完整牙):

Button.OnClickListener buttonSaveOnClickListener 
= new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
    // TODO Auto-generated method stub 
    OutputStream outStream = null; 
    File file = new File(extStorageDirectory, "er.PNG"); 
    try { 
    outStream = new FileOutputStream(file); 
    bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
    outStream.flush(); 
    outStream.close(); 

    Toast.makeText(AndroidWebImage.this, "Saved", Toast.LENGTH_LONG).show(); 

    } catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    Toast.makeText(AndroidWebImage.this, e.toString(), Toast.LENGTH_LONG).show(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    Toast.makeText(AndroidWebImage.this, e.toString(), Toast.LENGTH_LONG).show(); 
    } 

    } 

}; 
+0

我总是得到FileNotFound异常..当我试着这个代码 –

+0

你给了正确的路径到您的文件? – crazyPixel

0

this的Android培训仔细张贴理出头绪。正如帖子里说,

The Android Camera application saves a full-size photo if you give it a file to save into. 

所以如果你没有通过文件的Uri,将只存储在DCIM,你应该使用这个Uri访问图像。

Check out similar thread

+0

我可以使用该Uri存储在数据库中吗?我的意思是我可以在其他时间使用相同的uri并检索图像吗? –

+0

是的,你可以使用Uri来存储数据库,并检索图像。 – GrIsHu

+0

File image = new File(Environment.getExternalStorageDirectory()+ File.separator +“mypics”); Uri fileUri = Uri.fromFile(image); intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);我可以这样做,并存储在数据库中的这个fileUri?什么是文件名? –