2016-10-12 3 views
0

질문은 꽤 일반적이며 나는 그것을 봤지만 여전히 작동하지 않습니다. 내가 선언 한 android - 텍스트 파일을 저장할 수 없습니다

   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; 

내 매니페스트

:

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

을하지만 매번 내가 시도하고 코드에게와 응용 프로그램 충돌을 실행 단순히 아래의 코드를 사용하여 텍스트 파일을 저장하기 위해 노력하고있어 오류 '불행하게도, APP_NAME이 중지가. "사람이 내 코드에 어떤 문제가 있는지 말해 줄래?

+0

마쉬 멜로우 이상의 기기에서 실행 중이십니까? –

+1

또한 스택 트레이스를 게시하십시오. –

+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)부터 사용자는 앱을 실행할 때가 아니라 앱이 실행되는 동안 앱에 권한을 부여합니다. 이 방법은 사용자가 앱을 설치하거나 업데이트 할 때 권한을 부여 할 필요가 없기 때문에 앱 설치 프로세스를 간소화합니다. 또한 사용자가 앱의 기능을 더 잘 제어 할 수 있습니다. 예를 들어 사용자는 카메라 앱에 카메라에 대한 액세스 권한을 부여 할 수는 있지만 기기 위치에 대한 권한 부여는 선택할 수 없습니다. 사용자는 언제든지 앱의 설정 화면으로 이동하여 권한을 취소 할 수 있습니다.

관련 문제