2012-02-21 48 views
1

我有一个应用程序,将数据备份到SD卡。当插入SD卡时,它可以很好地工作,并将备份数据。当SD卡不存在时,我编程它创建一个警告,告诉用户未找到SD卡。强制写入SD卡时关闭(安卓)

我遇到的问题是,如果有人试图导出数据的第一次没有SD卡存在,它会强制关闭。但是,如果他们先备份一组数据,然后在尝试备份更多数据时再没有SD卡,则会以我想要的方式显示警报消息。

有人请帮忙!继承人我的代码(从教程修改):

InputStream myInput; 

try { 

    myInput = new FileInputStream("/data/data/com.android.footprint/databases/MY_DATABASE"); 

    File directory = new File("/sdcard/Footprint"); 

    if (!directory.exists()) 
    { 
     directory.mkdirs(); 
    } 


    OutputStream myOutput = new FileOutputStream(directory.getPath()+ "/MY_DATABASE.backup"); 


    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = myInput.read(buffer))>0) 
    { 
     myOutput.write(buffer, 0, length); 
    } 

    myOutput.flush(); 

    myOutput.close(); 

    myInput.close(); 

    alertDialog2 = new AlertDialog.Builder(
      settings.this).create(); 
    alertDialog2.setTitle("Export Complete"); 
    alertDialog2.setMessage("Data Backup successful"); 
    alertDialog2.setButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      alertDialog2.dismiss(); 
     } 
    }); 
    alertDialog2.show(); 

} catch (FileNotFoundException e) { 
    alertDialog2.dismiss(); 
    alertDialog3 = new AlertDialog.Builder(
      settings.this).create(); 
    alertDialog3.setIcon(R.drawable.delete); 
    alertDialog3.setTitle("Export Failed"); 
    alertDialog3.setMessage("Make sure SD card is inserted and unmounted"); 
    alertDialog3.setButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      alertDialog3.dismiss(); 
     } 
    }); 
    alertDialog3.show(); 
} catch (IOException e) { 
    alertDialog2.dismiss(); 
    alertDialog3 = new AlertDialog.Builder(
      settings.this).create(); 
    alertDialog3.setIcon(R.drawable.delete); 
    alertDialog3.setTitle("Export Failed"); 
    alertDialog3.setMessage("Make sure SD card is inserted and unmounted"); 
    alertDialog3.setButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      alertDialog3.dismiss(); 
     } 
    }); 
    alertDialog3.show(); 
} catch (Exception e) { 
    alertDialog2.dismiss(); 
    alertDialog3 = new AlertDialog.Builder(
      settings.this).create(); 
    alertDialog3.setIcon(R.drawable.delete); 
    alertDialog3.setTitle("Export Failed"); 
    alertDialog3.setMessage("Make sure SD card is inserted and unmounted"); 
    alertDialog3.setButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      alertDialog3.dismiss(); 
     } 
    }); 
    alertDialog3.show(); 
} 

回答

2

使用此代码检查SD卡:

public static boolean isSdPresent() { 
    return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); 
} 

我发现这对这个link。希望这有助于..

2

不知道这是否是你的问题,但它是一个好主意,审查你检查的方式,如果SD卡存在。以下是我在我的最新的应用程序的一个处理它:

String state = Environment.getExternalStorageState(); 

    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     // Everything is fine, write away ! 
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
     // Card is in read mode, cannot write 
     Log.e("FileManager", "SD Card is in READ ONLY mode, impossible to write files."); 
    } else { 
     // Impossible to access SD Card 
     Log.e("FileManager", "Having trouble with SD card, can't write nor read from it."); 
    } 

另外,我建议你从Environement类中,像这样的静态方法得到你的路径:

File root = Environment.getExternalStorageDirectory(); 
    File directory = new File(root + "/Footprint"); 

希望这帮助你解决你的问题!