2017-03-13 1 views
-1

In meiner Splash-Aktivität starte ich eine Handler-Verzögerung, wenn Start App, jetzt mit Gerät 6.0 (Ziel 23) Ich habe Dialog fragen Erlaubnis. Also ich will nach dem Klick im Dialog erlauben ich werde meine Handler starten, denn wenn ich Handler zur gleichen Zeit mit der Check-Berechtigung starte, wird es nächste Aktivität, obwohl ich nicht klicken kann im Dialog erlauben. Wie kann ich es tun? hier ist mein Code:Wie kann ich Ereignis festlegen, wenn klicken Erlaube im Dialogfeld Erlaubnis Android Target> 23

@Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main22); 
 
     askPermissions(); 
 

 
    } 
 

 
    private static String[] STR_ALL_PERMITTIONS = new String[]{ 
 
      Manifest.permission.READ_EXTERNAL_STORAGE, 
 
      Manifest.permission.WRITE_EXTERNAL_STORAGE, 
 
      Manifest.permission.SEND_SMS, 
 
    }; 
 
    private static final int RCODE_PERMISSION_ALL = 1; 
 
    private int iAskingCounter = 0; 
 

 
    private boolean doesAppNeedPermissions() { 
 
     return android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1; 
 
    } 
 

 
    private void askPermissions() { 
 
     if (doesAppNeedPermissions()) { 
 
      Toast.makeText(this, "hi", Toast.LENGTH_SHORT).show(); 
 
      iAskingCounter++; 
 
      try { 
 
       boolean isPermitted = isPermittedAllPermissions(this, STR_ALL_PERMITTIONS); 
 
       if (!isPermitted) { 
 
        if (iAskingCounter >= 20) { 
 
         startNextIntent(); 
 
        } else { 
 
         ActivityCompat.requestPermissions(this, STR_ALL_PERMITTIONS, RCODE_PERMISSION_ALL); 
 
        } 
 
        return; 
 
       } 
 
      } catch (Exception e) { 
 
       e.printStackTrace(); 
 
      } 
 
     } else { 
 
      Toast.makeText(this, "helllo", Toast.LENGTH_SHORT).show(); 
 
     } 
 

 
    } 
 

 
    private void startNextIntent() { 
 
     Intent in = new Intent(Main22Activity.this, Main2Activity.class); 
 
     startActivity(in); 
 
    } 
 

 
    private boolean isPermittedAllPermissions(Context context, String... sArrPermissions) { 
 
     if (context == null || sArrPermissions == null) return true; 
 

 
     for (String permission : sArrPermissions) { 
 
      boolean shouldShow = ActivityCompat.shouldShowRequestPermissionRationale(this, permission); 
 
      if (shouldShow) { 
 
       //ActivityCompat.finishAffinity(this); 
 
      } 
 
      if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
 
       return false; 
 
      } 
 
     } 
 

 
     return true; 
 
    } 
 

 
    @Override 
 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
 

 
     askPermissions(); 
 
    } 
 
    public void playHandler(){ // where is I call it? 
 
     Handler handler = new Handler(); 
 
     handler.postDelayed(new Runnable() { 
 
      @Override 
 
      public void run() { 
 
       Intent in = new Intent(Main22Activity.this, Main2Activity.class); 
 
       startActivity(in); 
 
      } 
 
     }, 1000); 
 
    }

Antwort

0

Try this: in onRequestPermissionsResult() das Ereignis zulassen erhalten wie:

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 

     case RCODE_PERMISSION_ALL: { 

      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show(); 
       // call your method 
       Start_Handler() 
      } else { 
       Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show(); 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 
+0

Danke. Aber wenn ich die App schließe und öffne, kann sie die Methode start_handler() nicht aufrufen. –

+0

Vielen Dank. Ich habe es gemacht –

Verwandte Themen