2017-07-30 7 views
0

私はAndroid開発には初心者で、初回読み込み時にテキストファイルに書き込む基本アプリケーションを持っています。しかし、アプリケーションの初回読み込みであるため、最初にユーザーに読み書き権限を尋ねる必要があります。私が持っている問題は、アプリケーションがこれらのアクセス許可を持つ前にファイルを書き込もうとすることです。Android:アクセス許可が付与されるまで起動が遅くなる

public class MainActivity extends Activity { 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //Stes fullscreen and removes title 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); 

     setContentView(new Environment(this)); 
    } 
} 

コンストラクタEnvironment.jarため、それがまだ存在しない場合は、ファイルの書き込みを行う関数を呼び出します。私は、権限の要求コードのセクションが含まれている以下のMainActivity.javaクラスを持っています。

しかし、アプリケーションがアクセス許可を要求している間に、再度開始する前にこれらのアクセス許可を受け取るのを待っていないようです。アクセス許可を受け取るのを待つようにする方法はありますか?また、アプリケーションを閉じるためにアクセス許可が受信されない場合はありますか?

答えて

2

Permissionが付与されている場合に限り、Environmentコンストラクタを呼び出す必要があります。それ以外の場合は、アプリを続行する前に、最初に許可を与えるようにユーザーに尋ねるエラーダイアログを表示することができます。あなたは以下のように許可を要求する必要があります許可を確認するには -

Bool isPermissionGiven = false; 
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
      == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission. READ_EXTERNAL_STORAGE) 
      == PackageManager.PERMISSION_GRANTED) { 
     Log.v(TAG,"Permission is granted"); 
     isPermissionGiven = true; 
    } else { 

     Log.v(TAG,"Permission is revoked"); 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 1); 
     isPermissionGiven = false; 
    } 

if (isPermissionGiven){ 
    new Environment(this) 
} 

を次にonRequestPermissionsResult

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
switch (requestCode) { 
    case 0: 
     boolean isPerpermissionForAllGranted = false; 
     if (grantResults.length > 0 && permissions.length==grantResults.length) { 
      for (int i = 0; i < permissions.length; i++){ 
       if (grantResults[i] == PackageManager.PERMISSION_GRANTED){ 
        isPerpermissionForAllGranted=true; 
       }else{ 
        isPerpermissionForAllGranted=false; 
       } 
      } 

      Log.e("value", "Permission Granted, Now you can use local drive ."); 
     } else { 
      isPerpermissionForAllGranted=true; 
      Log.e("value", "Permission Denied, You cannot use local drive ."); 
     } 
     if(isPerpermissionForAllGranted){ 
      // Do your work here 
      new Environment(this); 
     } 
     break; 
} 

}

+0

ありがとう実装し、これは私が必要な正確に何をしました – Ryan

0

あなたはまた、Androidの規則のその違反がそのようなアプリを終了させるhttps://developer.android.com/training/permissions/requesting.html

ここonRequestPermissionsResult()メソッド 以上をimplment必要があります。このアプリがこの権限を必要とするようなものを印刷するだけでよいのです。または何でも言いたいことがあれば何でもしたいが、アプリケーションを終了しないでください。

また、何があってもアプリを起動する準備ができています。あなたは "ロード中..."のように待っている間、プレースホルダーのテキストをスティックすることができ、成功した結果にテキストを更新します。

関連する問題