显示警报 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 请求权限的意图中的标志。
该程序的问题在于它在显示 权限警报 时 关闭了 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 请求权限的意图中的标志。