请求权限对话框关闭 activity 并按任意键关闭 activity
Request permission dialog blackout the activity and pressing any key is closing the activity
我不知道为什么只对一个应用程序发生这种情况,因为我在其他应用程序上试过它工作正常。但是只有这个应用程序每当我请求权限时 activity 黑屏并且只出现权限对话框然后按 "Allow" 或 "Deny" 将关闭 activity 我需要重新打开它.
我怀疑这种行为发生在某些主题或 Activity 的扩展类型上,例如 "AppCompactActivity" 或 "ActionBarActivity".
这是我的代码
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults)
{
switch (requestCode)
{
case 1:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
Log.e("Permission","Granted");
}
else
{
Log.e("Permission","Not Granted");
}
break;
}
}
这就是主题,但它只是怀疑主题是原因
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowBackground">@color/primary_orange_lighter</item>
</style>
<style name="AppTheme.Splash_Activity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@color/primary_orange_lighter</item>
</style>
<style name="AppTheme.Login_Activity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@color/primary_orange_lighter</item>
</style>
<style name="AppTheme.Main_Activity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@color/primary_orange_lighter</item>
</style>
<style name="StarRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/star_rating_bar_full</item>
<item name="android:minHeight">48dip</item>
<item name="android:maxHeight">48dip</item>
</style>
<style name="Dialog" parent="@android:style/Theme.Holo.Dialog.NoActionBar">
<item name="android:color">#FFFFFFFF</item>
<item name="android:windowBackground">@color/trans_white</item>
<item name="android:windowMinWidthMajor">90%</item>
<item name="android:windowMinWidthMinor">90%</item>
</style>
<style name="ToolBarStyle" parent="AppTheme.Main_Activity">
<item name="android:statusBarColor">@color/primary_orange_lighter</item>
<item name="android:background">@color/primary_orange_lighter</item>
<item name="android:textColorPrimary">@android:color/white</item>
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">false</item>
<item name="color">@android:color/white</item>
</style>
<style name="CustomLoadingDialog" parent="SpotsDialogDefault">
<item name="DialogTitleAppearance">@android:style/TextAppearance.Medium</item>
<item name="DialogTitleText">Loading</item>
<item name="android:textColor">@color/white</item>
<item name="android:background">@color/black</item>
<item name="DialogSpotColor">@color/white</item>
<item name="DialogSpotCount">5</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="SwitchButtonStyle">
<item name="android:paddingLeft">10dp</item>
<item name="android:paddingRight">10dp</item>
<item name="android:paddingTop">4dp</item>
<item name="android:paddingBottom">4dp</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
这是发生请求的class
import android.Manifest;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import syncworx.com.kunhadi_driver.R;
import syncworx.com.kunhadi_driver.classes.Constants;
public class Test_Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults)
{
switch (requestCode)
{
case 1:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
Log.e("Permission","Granted");
}
else
{
Log.e("Permission","Not Granted");
}
break;
}
}
}
在为这个问题苦苦挣扎了两天之后,我终于找到了问题所在
好吧让我post先说问题的根源
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,就好像它不再可见一样,所以它被销毁,然后在权限后面有停电对话框,因为 activity 不再存在,然后按拒绝或允许将简单地关闭对话框并向 onRequestPermissionsResult 方法发送回调,但 activity 不存在以接收回调
我不知道为什么只对一个应用程序发生这种情况,因为我在其他应用程序上试过它工作正常。但是只有这个应用程序每当我请求权限时 activity 黑屏并且只出现权限对话框然后按 "Allow" 或 "Deny" 将关闭 activity 我需要重新打开它. 我怀疑这种行为发生在某些主题或 Activity 的扩展类型上,例如 "AppCompactActivity" 或 "ActionBarActivity".
这是我的代码
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults)
{
switch (requestCode)
{
case 1:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
Log.e("Permission","Granted");
}
else
{
Log.e("Permission","Not Granted");
}
break;
}
}
这就是主题,但它只是怀疑主题是原因
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowBackground">@color/primary_orange_lighter</item>
</style>
<style name="AppTheme.Splash_Activity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@color/primary_orange_lighter</item>
</style>
<style name="AppTheme.Login_Activity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@color/primary_orange_lighter</item>
</style>
<style name="AppTheme.Main_Activity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@color/primary_orange_lighter</item>
</style>
<style name="StarRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/star_rating_bar_full</item>
<item name="android:minHeight">48dip</item>
<item name="android:maxHeight">48dip</item>
</style>
<style name="Dialog" parent="@android:style/Theme.Holo.Dialog.NoActionBar">
<item name="android:color">#FFFFFFFF</item>
<item name="android:windowBackground">@color/trans_white</item>
<item name="android:windowMinWidthMajor">90%</item>
<item name="android:windowMinWidthMinor">90%</item>
</style>
<style name="ToolBarStyle" parent="AppTheme.Main_Activity">
<item name="android:statusBarColor">@color/primary_orange_lighter</item>
<item name="android:background">@color/primary_orange_lighter</item>
<item name="android:textColorPrimary">@android:color/white</item>
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">false</item>
<item name="color">@android:color/white</item>
</style>
<style name="CustomLoadingDialog" parent="SpotsDialogDefault">
<item name="DialogTitleAppearance">@android:style/TextAppearance.Medium</item>
<item name="DialogTitleText">Loading</item>
<item name="android:textColor">@color/white</item>
<item name="android:background">@color/black</item>
<item name="DialogSpotColor">@color/white</item>
<item name="DialogSpotCount">5</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="SwitchButtonStyle">
<item name="android:paddingLeft">10dp</item>
<item name="android:paddingRight">10dp</item>
<item name="android:paddingTop">4dp</item>
<item name="android:paddingBottom">4dp</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
这是发生请求的class
import android.Manifest;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import syncworx.com.kunhadi_driver.R;
import syncworx.com.kunhadi_driver.classes.Constants;
public class Test_Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults)
{
switch (requestCode)
{
case 1:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
Log.e("Permission","Granted");
}
else
{
Log.e("Permission","Not Granted");
}
break;
}
}
}
在为这个问题苦苦挣扎了两天之后,我终于找到了问题所在 好吧让我post先说问题的根源
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,就好像它不再可见一样,所以它被销毁,然后在权限后面有停电对话框,因为 activity 不再存在,然后按拒绝或允许将简单地关闭对话框并向 onRequestPermissionsResult 方法发送回调,但 activity 不存在以接收回调