2016-10-12 24 views
0

質問はかなり一般的で、私はそれをgoogledしましたが、それはまだ動作しません。私が使用してアプリケーションのクラッシュを試してみて、コードを実行しかし毎回アンドロイド - テキストファイルを保存できません

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

:私は単純に以下のコード使用してテキストファイルを保存しようとしている:

   String state = Environment.getExternalStorageState(); 
       if (!Environment.MEDIA_MOUNTED.equals(state)) { 
        Toast.makeText(getApplicationContext(), "Access denied", Toast.LENGTH_LONG).show(); 
       } 
       String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/data"; 
       File dir = new File(path); 
       dir.mkdirs(); 
       File file = new File(path + "/savedFile.txt"); 
       String saveText = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime()); 
       FileOutputStream fos = null; 
       try { 
        fos = new FileOutputStream(file); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 
       try { 
        try { 
         fos.write(saveText.getBytes()); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } finally { 
        try { 
         fos.close(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
       Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_LONG).show(); 
       break; 

を、私のマニフェストに私が宣言しましたエラーは「残念ながら、APP_NAMEが停止している。」誰もが自分のコードが間違っているものを私に伝えることができますか?

+0

マシュマロまたはそれ以降のデバイスで実行していますか? –

+1

また、完全なstacktraceを投稿してください。 –

+0

デバッグ時に、どの部分がクラッシュしますか? – Shocklo

答えて

0
if ((checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)&& Build.VERSION.SDK_INT >= 23) { 
       Log.v(TAG,"Permission is granted"); 
       return true;} 
       else{ 
       ActivityCompat.requestPermissions(this, new String[]Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE); 
        } 
    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     if(grantResults[0]== PackageManager.PERMISSION_GRANTED){ 
      Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]); 
      String state = Environment.getExternalStorageState(); 
      if (!Environment.MEDIA_MOUNTED.equals(state)) { 
       Toast.makeText(getApplicationContext(), "Access denied", Toast.LENGTH_LONG).show(); 
      } 
      String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/data"; 
      File dir = new File(path); 
      dir.mkdirs(); 
      File file = new File(path + "/savedFile.txt"); 
      String saveText = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime()); 

       try { 
         fos = new FileOutputStream(file); 
         OutputStreamWriter ow = new OutputStreamWriter(fos); 
         ow.write(saveText.getBytes()); 
         ow.append(saveText.getText()); 
         ow.close(); 
         fos.close(); 
         Toast.makeText(getBaseContext(), 
         "Done writing SD 'mysdfile.txt'",Toast.LENGTH_SHORT).show(); 
        }} catch (Exception e) { 
          Toast.makeText(getBaseContext(), e.getMessage(),Toast.LENGTH_SHORT).show(); 
              } 

     } 
    } 

あなたはこのcode.Becauseようなものを使用する必要があり、指定する必要がランタイムpermissions.Marshmallow最初にそれぞれのリソースを使用するためのアクセス許可をチェックする必要があります。 Android 6.0(APIレベル23)から、ユーザーはアプリのインストール時ではなく、アプリが実行中にアプリにアクセス許可を与えます。このアプローチは、ユーザーがアプリのインストールや更新時に権限を与える必要がないため、アプリのインストールプロセスを合理化します。また、ユーザーにアプリの機能をより詳細に制御することもできます。例えば、ユーザは、カメラアプリがカメラにアクセスするが、デバイスの場所にはアクセスしないようにすることができる。ユーザーはいつでもアプリの設定画面にアクセスして権限を取り消すことができます

関連する問題