2017-02-08 3 views
2

auf meinem app ich eine Splash-Aktivität umgesetzt habe, das, wenn überprüft, ist zum ersten Mal ausgeführt App und wenn sie wahr zeigt eine Dialogmeldung, das ist der Code:Android Prüfungserlaubnis vor Haupttätigkeit

public void onConnected(Bundle connectionHint) { 
    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
     myLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); 
    } 
    SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

    boolean isFirstStart = getPrefs.getBoolean("firstStart", true); 
    if (isFirstStart) { 
     android.app.AlertDialog alertDialog = new android.app.AlertDialog.Builder(splashscreen.this).create(); 
     alertDialog.setTitle(getResources().getString(R.string.titolo_intro_sms)); 
     alertDialog.setMessage(getResources().getString(R.string.intro_sms)); 
     alertDialog.setButton(android.app.AlertDialog.BUTTON_NEUTRAL, "OK", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 

         Intent i = new Intent(splashscreen.this, MainActivity.class); 
         startActivity(i); 

        } 
       }); 
     alertDialog.show(); 

     SharedPreferences.Editor e = getPrefs.edit(); 
     e.putBoolean("firstStart", false); 
     e.apply(); 
    } else { 

     startApp(); 
    } 
} 

Wenn Dialog Show ist Wenn ich ok klicke, öffne ich MainActivity. Klicken Sie nach dem OK auf den Dialog, um MainActivity zu starten. Ich habe eine abstrakte Klasse für diese erstellen und ich auf diese Weise nennen:

requestAppPermissions(new String[]{ 
             Manifest.permission.ACCESS_COARSE_LOCATION}, 
           R.string.msg,REQUEST_PERMISSION); 

Nun ich diese Zeile Code-Set in OnCreate sind zeigen die Berechtigungsanfrage vor der Aktivität spritzen, aber wenn ich in onClick methos von ‚set ok 'Allert Dialog wird nicht angezeigt.

Wie kann ich die Erlaubnisanforderung nach einem Klick anzeigen, bevor ich die Hauptaktivität starte? Jede Hilfe ist groß Dank

Ich habe meine onRequestPermissionresult in abstrakte Klasse auf diese Weise integrieren:

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    int permissionCheck = PackageManager.PERMISSION_GRANTED; 
    for(int permisson : grantResults) { 
     permissionCheck = permissionCheck + permisson; 
    } 

    if((grantResults.length > 0) && PackageManager.PERMISSION_GRANTED == permissionCheck) { 
     onPermissionsGranted(requestCode); 
     Intent i = new Intent(this, MainActivity.class); //start activity 
     startActivity(i); 
    } else { 
     //Display message when contain some Dangerous permisson not accept 
     Snackbar.make(findViewById(android.R.id.content), mErrorString.get(requestCode), 
       Snackbar.LENGTH_INDEFINITE).setAction("ENABLE", new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(); 
       i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
       i.setData(Uri.parse("package:" + getPackageName())); 
       i.addCategory(Intent.CATEGORY_DEFAULT); 
       i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
       i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 
       startActivity(i); 
      } 
     }).show(); 
    } 
} 

und die Meldung Erlaubnis Show nach ok Klick ist aber nach der App schließen und nicht offen MainActivity

ich habe meine splashcrenn ändern und ich habe alle Verfahren über permsion hinein gesetzt, ist dieser Code:

public void onPermissionsGranted(int requestCode) { 

} 

public void requestAppPermissions(final String[]requestedPermissions, final int stringId, final int requestCode) { 
    mErrorString.put(requestCode, stringId); 

    int permissionCheck = PackageManager.PERMISSION_GRANTED; 
    boolean showRequestPermissions = false; 
    for(String permission: requestedPermissions) { 
     permissionCheck = permissionCheck + ContextCompat.checkSelfPermission(this, permission); 
     showRequestPermissions = showRequestPermissions || ActivityCompat.shouldShowRequestPermissionRationale(this, permission); 
    } 

    if (permissionCheck!=PackageManager.PERMISSION_GRANTED) { 
     if(showRequestPermissions) { 
      Snackbar.make(findViewById(android.R.id.content), stringId, Snackbar.LENGTH_INDEFINITE).setAction("GRANT", new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        ActivityCompat.requestPermissions(splashscreen.this, requestedPermissions, requestCode); 
       } 
      }).show(); 
     } else { 

      ActivityCompat.requestPermissions(this, requestedPermissions, requestCode); 
     } 
    } else { 
     onPermissionsGranted(requestCode); 
    } 
} 

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

     case 1: { 

      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show(); 
       Intent i = new Intent(splashscreen.this, MainActivity.class); //start activity 
       splashscreen.this.startActivity(i); 
      } else { 
       Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show(); 
      } 
      return; 
     } 

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

in Dialog Schaltfläche ‚OK‘ klicken i diese gesetzt haben:

alertDialog.setButton(android.app.AlertDialog.BUTTON_NEUTRAL, "OK", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         ActivityCompat.requestPermissions(splashscreen.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1); 

         /*Intent i = new Intent(splashscreen.this, MainActivity.class); 
         startActivity(i);*/ 

        } 
       }); 
     alertDialog.show(); 

, aber wenn ich die App schließen und nicht offen MainActivity

Antwort

1

versuchen Sie dies:

zeigt Erlaubnis Dialog in Schaltfläche klicken:

alertDialog.setButton(android.app.AlertDialog.BUTTON_NEUTRAL, "OK", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1); //show reuest dialog 

       } 
      }); 
    alertDialog.show(); 

nun das Ergebnis in onRequestPermissionsResult() fangen und starten Sie Ihre MainActivity

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

     case 1: { 

      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Toast.makeText(getContext(), "Permission granted", Toast.LENGTH_SHORT).show(); 
       Intent i = new Intent(splashscreen.this, MainActivity.class); //start activity 
       startActivity(i); 
      } else { 
       Toast.makeText(getContext(), "Permission denied", Toast.LENGTH_SHORT).show(); 
      } 
      return; 
     } 

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

in Ihrer abstrakten Klasse Ihren Aktivitätskontext übergeben und verwenden Sie es zum Starten MainActivity

Kontext weitergeben müssen:

class YourAbstractClass{ 

// variable to hold context 
private Context context; 

//save the context recievied via constructor in a local variable 

public YourAbstractClass(Context context){ //constructor 
    this.context=context; 
    } 
} 

In Ihrer splash Aktivität Ihre Abstrakte Klasse wie nennen:

YourAbstractClass class = new YourAbstractClass(this); //pass context 

Jetzt startActivity den Kontext verwenden

Intent myIntent = new Intent(context, MainActivity.class); 
context.startActivity(myIntent); 
+0

auf Ich habe meinen Post mit einer Antwort über Ihre Hilfe geändert – APPGIS

+0

Sie müssen Ihren 'splash activity' Kontext an Ihre Abstract Klasse übergeben und die Aktivität damit starten Kontext – rafsanahmad007

+0

Wie ................ – APPGIS

0

Antrag die Erlaubnis, nachdem Sie auf OK klicken, aber nicht starten klicken Sie auf OK die Aktivität sofort. Warten Sie auf das Ergebnis in onRequestPermissionResult und starten Sie dort Ihre MainActivity.

+0

Können Sie ein Beispiel teilen? – APPGIS

+0

Nun, fordern Sie einfach Ihre Berechtigungen wie in 'ok' an, aber rufen Sie startActivity nicht auf. Wenn Sie das Ergebnis in onRequestPermissionResult erhalten, rufen Sie 'startActivity (context, MainActivity.class)' –

0

Verwenden if-else-Anweisung in Ihrem Knopf Anruf.

Wenn Sie bereits berechtigt sind, führen Sie den MainActivity-Aufruf unter if part aus. Wenn nicht, fragen Sie im anderen Teil von if-else nach Erlaubnis.

verwenden Jetzt OnRequestPermissionResult Methode, die aufgerufen wird, wenn Berechtigungen erteilt oder verweigert werden. Wenn Berechtigungen in dieser Methode gewährt werden, führen Sie den MainActivity-Aufruf erneut aus oder machen Sie einfach das, was Sie tun müssen, wenn die Berechtigung verweigert wird. Zeigen Sie ihm den Grund, warum Sie eine Berechtigung benötigen, und versuchen Sie es erneut.

Ich hoffe, es hat geholfen. Für alles über Berechtigungen in Android in einer vereinfachten Version klicken Sie einfach HERE (http://www.vogella.com/tutorials/AndroidPermissions/article.html).

Verwandte Themen