Android 无法将图片添加到新文件夹

Android 无法将图片添加到新文件夹,android,Android,将图片添加到新文件夹时遇到问题。由于某些原因,当我的手机连接到电脑并用作模拟器时,图片确实会保存到正确的文件夹中。但一旦我断开手机与电脑的连接,它就不会将图片保存到文件夹中。我已包括以下权限: <uses-permission android:name="android.permission.SET_WALLPAPER" /> <uses-permission android:name="android.permission.CAMERA"/> <uses-perm

将图片添加到新文件夹时遇到问题。由于某些原因,当我的手机连接到电脑并用作模拟器时,图片确实会保存到正确的文件夹中。但一旦我断开手机与电脑的连接,它就不会将图片保存到文件夹中。我已包括以下权限:

<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);
    }
}
}
公共类摄影机扩展活动实现View.OnClickListener{
意图一;
ImageView iv;
图像按钮ib;
按钮b;
最终静态int cameraData=0;
位图bmp;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.camera);
初始化();
InputStream is=getResources().openRawResource(R.drawable.ic_启动器);
bmp=位图工厂.decodeStream(is);
}
私有void初始化(){
//TODO自动生成的方法存根
iv=(ImageView)findViewById(R.id.ivReturnPic);
ib=(ImageButton)findViewById(R.id.ibTakePic);
b=(按钮)findViewById(R.id.bSetWall);
b、 setOnClickListener(此);
ib.setOnClickListener(本);
}
公共void onClick(视图v){
//TODO自动生成的方法存根
开关(v.getId()){
案例R.id.B网球:
试一试{
getApplicationContext().setWallpaper(bmp);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
打破
案例R.id.ibTakePic:
int imageNum=0;
Intent-imageIntent=newintent(android.provider.MediaStore.ACTION\u-IMAGE\u-CAPTURE);
File imagesFolder=新文件(Environment.getExternalStorageDirectory(),“BeautifulPlaces”);

imagesFolder.mkdirs();//在将数据写入外部存储器之前,必须先检查它,因为它可能不可用

您可以参考此文档:()


我添加了检查,以确保外部存储可用。再次建议,该程序在手机连接到计算机时工作,但在断开连接时不工作。我是否缺少权限???因为它在连接到计算机时工作很奇怪,还是因为应用程序未签名但仍在运行,所以应该如此。我我认为您应该在onActivityResult中执行保存过程,因为在相机活动完成之前,图像数据不会传回。
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
        //  ...            

    }
}