Benachrichtigung Freigabe ab Android 14

jerevat

Mitglied
Hallo,

ich habe hier eine Nutzer-Abfrage zur Freigabe der Benachrichtigungen der App.
Diese funktioniert:
  • auf Endgeräten mit Android 7, 8, 10, 12, 13
  • auf dem Emulator (Bluestacks)
Sie funktioniert nicht / Lässt App sofort abstürzen:
- auf Endgeräten mit Android 14

Weil der Emulator akkurat seiner Arbeit nachgeht, kann ich keine Exceptions abfangen.
Vielleicht liegt es an irgendwelchen Projekteinstellungen, die ich nicht verstehe, oder das Android 14 System ist instabil - dann müsste das in anderen Apps ebenso passieren, was mir noch nicht aufgefallen ist, da nichts Neues seit dem Update installiert wurde.
Wenn ihr mal drüber schaut, fällt euch etwas auf, das dieses Problem verursachen könnte?

Java:
public class MainActivity extends AppCompatActivity implements android.widget.PopupMenu.OnMenuItemClickListener {
    final String PERMISSION_POST_NOTIFICATIONS = Manifest.permission.POST_NOTIFICATIONS;
    int _requestCode = -1;  // dieser Wert ändert sich in Methoden, die hier aus Übersicht ausgelassen wurden
    boolean _granted = false;
    
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == _requestCode) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                _granted = true;
            } else if (!ActivityCompat.shouldShowRequestPermissionRationale(this, PERMISSION_POST_NOTIFICATIONS)) {
                _granted = false;
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("Erlaubnis erforderlich")
                        .setMessage("Die Funktion Erinnerungen ist weiterhin nicht verfügbar, da die Zulassung für Benachrichtigungen verweigert wurde.")
                        .setCancelable(false)
                        .setNegativeButton("Abbruch", ((dialog, which) -> dialog.dismiss()))
                        .setPositiveButton("Einstellungen", (dialog, which) -> {
                            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                            Uri uri = Uri.fromParts("package", getPackageName(), null);
                            intent.setData(uri);
                            startActivity(intent);
                            dialog.dismiss();
                        });
                builder.show();
            } else {
                isPermissionGranted();
            }
        }
    }

    private boolean isPermissionGranted() {
        if (ActivityCompat.checkSelfPermission(this, PERMISSION_POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
            _granted = true;
        } else if (ActivityCompat.shouldShowRequestPermissionRationale(this, PERMISSION_POST_NOTIFICATIONS)) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Erlaubnis erforderlich")
                    .setMessage("Diese App erfordert die Zulassung für Benachrichtigungen.")
                    .setCancelable(false)
                    .setPositiveButton("OK", (dialog, which) -> {
                        ActivityCompat.requestPermissions(MainActivity.this, new String[] { PERMISSION_POST_NOTIFICATIONS }, _requestCode);
                        _granted = true;
                        dialog.dismiss();
                    })
                    .setNegativeButton("Abbruch", (dialog, which) -> {
                        _granted = false;
                        dialog.dismiss();
                    });
            builder.show();
        } else {
            ActivityCompat.requestPermissions(MainActivity.this, new String[] { PERMISSION_POST_NOTIFICATIONS }, _requestCode);
        }
        return _granted;
    }

    
    @Override
    public boolean onMenuItemClick(MenuItem menuItem) {
        // Hier wird bei Bedarf "isPermissionGranted()" ausgeführt
    }
}

Im build.gradle:
Code:
plugins {
    id 'com.android.application'
}

android {
    namespace 'com.apps.demo2'
    compileSdk 34

    defaultConfig {
        applicationId "com.apps.demo2"
        minSdk 24
        targetSdk 34
        versionCode 1
        versionName 'Demo 2'

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.9.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation files('joda-time')
    implementation files('libs\\joda-time-2.12.5.jar')
    implementation files('libs\\joda-time-2.12.5.jar')
    implementation files('libs\\joda-time-2.12.5.jar')
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}
 
ActivityCompat.checkSelfPermission(this, PERMISSION_POST_NOTIFICATIONS)
Ist auch nicht richtig.
Schaue mal hier .
https://developer.android.com/training/permissions/requesting
ContextCompat.checkSelfPermission( CONTEXT, Manifest.permission.REQUESTED_PERMISSION)

Auch beim nicht vorhanden sein und abfragen der Per. das selbe.


 

Zurück
Oben