2012-03-09 23 views
1

新しいフォルダに画像を追加するときに問題があります。私の電話がコンピュータに接続され、エミュレータとして使用されている何らかの理由で、写真は実際に正しいフォルダに保存されます。しかし、一度私はコンピュータから電話を切断すると、フォルダに画像を保存しません。私は、次の権限が含まれている:新しいフォルダに画像を追加できません

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

私のコードは、あなたがそれにデータを書き込む前に、外部ストレージをチェックする必要が怒鳴る

public class Camera extends Activity implements View.OnClickListener{ 
Intent i; 
ImageView iv; 
ImageButton ib; 
Button b; 
final static int cameraData = 0; 
Bitmap bmp; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.camera); 
    initialize(); 
    InputStream is = getResources().openRawResource(R.drawable.ic_launcher); 
    bmp= BitmapFactory.decodeStream(is); 
} 

private void initialize() { 
    // TODO Auto-generated method stub 
    iv =(ImageView) findViewById(R.id.ivReturnPic); 
    ib = (ImageButton) findViewById(R.id.ibTakePic); 
    b = (Button)findViewById(R.id.bSetWall); 
    b.setOnClickListener(this); 
    ib.setOnClickListener(this); 
} 

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch(v.getId()){ 
    case R.id.bSetWall: 
     try { 
      getApplicationContext().setWallpaper(bmp); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     break; 
    case R.id.ibTakePic: 
     int imageNum = 0; 
     Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     File imagesFolder = new File(Environment.getExternalStorageDirectory(), "BeautifulPlaces"); 
     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); 
     startActivityForResult(imageIntent, 0); 

    } 
} 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     Bundle extras = data.getExtras(); 
     bmp = (Bitmap) extras.get("data"); 
     iv.setImageBitmap(bmp); 
    } 
} 
} 

答えて

0

です。利用できない可能性があるためです。あなたは、この文書を参照することができ

http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()

String extStorageState = Environment.getExternalStorageState(); 
if (extStorageState.equalsIgnoreCase(Environment.MEDIA_MOUNTED)) { 
    // For ensure there is no problem, I usually do one more checking here 
    File externalDir = Environment.getExternalStorageDirectory(); 
    if (externalDir.canWrite()) { 
     // Do you job here 
     // ...    

    } 
} 
+0

は、私は電話がコンピュータに接続されているが、ときに切断されていない場合にプログラムの動作を再度示唆したように、外部ストレージが利用可能であることを確認するためのチェックを追加しました。 – user1258244

+0

私に行方不明の許可はありますか?その奇妙なので、それはコンピュータに接続中に動作するか、それはアプリが署名されていないので、それはそれである必要がありますまだ実行されます。 – user1258244

+0

私はあなたの保存プロセスをonActivityResultで行うべきだと思います。なぜなら、画像データは、カメラの活動が終了するまで戻ってこないからです。 – Hanon

関連する問題