显示警报 requestPermissions 关闭时出现问题 Activity

Problem when showing alert requestPermissions close Activity

该程序的问题在于它在显示 权限警报 关闭了 Activity

喜欢这张照片

如果它应该以这种方式在程序中显示所需的警报

Build.gradle

android {
compileSdkVersion 28
defaultConfig {
    applicationId "com.sgpco.mygiti"
    minSdkVersion 16
    targetSdkVersion 28
    versionCode 1
    versionName "1.2.9.9"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    vectorDrawables.useSupportLibrary = true
}
signingConfigs {
    config {
        keyAlias '****'
        keyPassword '****'
        storeFile file('*****')
        storePassword '****'
    }
}
buildTypes {
    release {
        
    }
    debug {
        clean
        multiDexEnabled true
    }
}
lintOptions {
    checkReleaseBuilds false
    abortOnError false
}
}

风格

<resources>

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
    <item name="android:windowLightStatusBar">false</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

<style name="AppThemeBlack" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/Black</item>
    <item name="colorPrimaryDark">@color/Gray</item>
    <item name="colorAccent">@color/White</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
    <item name="android:windowLightStatusBar">false</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" >
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

<style name="WindowAnimationTransition" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
    <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
    <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>

<style name="CustomProgressBar" parent="android:Widget.ProgressBar.Horizontal">
    <item name="android:indeterminateOnly">false</item>
    <item name="android:progressDrawable">@xml/layout_progress</item>
    <item name="android:minHeight">20dp</item>
    <item name="android:maxHeight">20dp</item>
</style>

清单

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
    android:name=".Application.Utility.AppController"
    android:allowBackup="true"
    android:hardwareAccelerated="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:networkSecurityConfig="@xml/network_security_config"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:theme="@style/AppTheme">

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.authorityStr"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths" />
    </provider>

    <activity
        android:name=".Application.Activities.ActAgent.ActLogin"
        android:launchMode="singleTask"
        android:screenOrientation="unspecified"
        android:theme="@style/AppTheme"
        android:windowSoftInputMode="stateAlwaysVisible">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
   </application>

Activity

public class BaseActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST_CODE = 200;
private static final String[] REQUIRED_SDK_PERMISSIONS = new String[] {
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.READ_EXTERNAL_STORAGE
};

@Override
protected void onResume() {
    super.onResume();
    if (Build.VERSION.SDK_INT >= 23) {
        final List<String> missingPermissions = new ArrayList<String>();
        // check all required dynamic permissions
        for (final String permission : REQUIRED_SDK_PERMISSIONS) {
            final int result = ContextCompat.checkSelfPermission(this, permission);
            if (result != PackageManager.PERMISSION_GRANTED) {
                missingPermissions.add(permission);
            }
        }
        if (!missingPermissions.isEmpty()) {
            // request all missing permissions
            final String[] permissions = missingPermissions
                    .toArray(new String[missingPermissions.size()]);
            requestPermissions(permissions, PERMISSION_REQUEST_CODE);
        } else {
            final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
            Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
            onRequestPermissionsResult(PERMISSION_REQUEST_CODE, REQUIRED_SDK_PERMISSIONS,
                    grantResults);
        }
    }
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (Build.VERSION.SDK_INT >= 23) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                for (int index = permissions.length - 1; index >= 0; --index) {
                if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
                    finish();
                    return;
                }
            }
                break;
        }
    }
}
}

我所做的工作是根据上述方法进行的,我的一般问题是它在显示此警报时关闭Activity。

所以这是一些模拟代码来显示您的问题来源:

   Intent intent = new Intent(Splash_Activity.this, 
   Test_Activity.class);
   intent .addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
   intent .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   startActivity(intent);

正如你在此处看到的,当我启动 Test_Activity 时,我正在请求其中的权限 Activity,我在启动它的意图中添加了一些标志,以便当这个activity 不再可见,它会自动销毁,似乎请求权限确实阻止了 activity,就好像它不再可见一样,所以它被销毁,然后在权限后面有停电dialog 因为没有 activity alive 然后按下 deny 或 allow 将简单地关闭对话框并向 onRequestPermissionsResult 方法发送回调,但 activity 不活跃以接收回调。 所以最初添加到意图的标志是问题所在。 因此,请删除添加到启动 activity 请求权限的意图中的标志。