Android 警报对话框意外显示

Android 警报对话框意外显示,android,android-alertdialog,Android,Android Alertdialog,在我的应用程序中,我有一个permissions方法,当构建代码>=23时检查并请求权限,我已经实现了AlertDialog来实现这一点,并在需要时显示基本原理。问题是,当我在棒棒糖上测试时,每次启动应用程序时都会弹出一个带有应用程序名称的对话框,我已经完全保护了所有涉及的方法,如果构建代码小于23,则不会执行任何操作,那么这个对话框是如何显示的,为什么仍然显示?以下是“胭脂”对话框的图像: 以下是所有相关代码: public void GMASInit() { linkGms = R

在我的应用程序中,我有一个permissions方法,当构建代码>=23时检查并请求权限,我已经实现了AlertDialog来实现这一点,并在需要时显示基本原理。问题是,当我在棒棒糖上测试时,每次启动应用程序时都会弹出一个带有应用程序名称的对话框,我已经完全保护了所有涉及的方法,如果构建代码小于23,则不会执行任何操作,那么这个对话框是如何显示的,为什么仍然显示?以下是“胭脂”对话框的图像:

以下是所有相关代码:

public void GMASInit() {
    linkGms = RunnerActivity.CurrentActivity;
    linkGms.startActivity(new Intent(linkGms, AudioSave.class));
}

protected void onStart() {//RunnerJNILib.ms_context
    super.onStart();

    if (Build.VERSION.SDK_INT >= 23) {
        getPerms();
    }
    //other unrelated code.....
}

public void getPerms() {
    if (Build.VERSION.SDK_INT >= 23) {
    try { // Determine weather developer included optional WRITE_SETTINGS permission in the manifest
        PackageInfo info = getPackageManager().getPackageInfo(linkGms.getPackageName(), PackageManager.GET_PERMISSIONS);
        if (info.requestedPermissions != null) {
            for (String p : info.requestedPermissions) {
                if (p.contains("WRITE_SETTINGS")) {
                    perms = 3;
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    final List<String> permissionsList = new ArrayList<String>();
    if(!addPermission(permissionsList, Manifest.permission.RECORD_AUDIO)) {permissionsNeeded.add("Record Audio");}
    if(!addPermission(permissionsList, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {permissionsNeeded.add("Write storage");}
    Log.i("yoyo","Number of permissions in manifest: " + String.valueOf(perms));
    if (permissionsList.size() > 0) {
        if (permissionsNeeded.size() > 0) {
                if (perms == 2) {
                    message = message + " " + msg1 + " and " + msg2 + " " + "to save and load data and record audio.";
                    }
                if (perms == 3) {
                    message = message + " " + msg1 + ", " + msg2 + " and " + msg3 + " " + "to save and load data, record audio and change ringtone.";
                    }
                Log.i("yoyo","Message to be shown: " + message);
                showMessageOKCancel(message, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface arg0, int arg1) {
                    if (Build.VERSION.SDK_INT >= 23) {
                    if (!Settings.System.canWrite(linkGms) && perms == 3) {
                        Intent writeset = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
                        writeset.setData(Uri.parse("package:" + linkGms.getPackageName()));
                        linkGms.startActivity(writeset);
                    }
                    linkGms.requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), Get_Permission);
                finish();
                }
            }
        });
        return;
        }
    }
    finish();
}
}

private boolean addPermission(List<String> permissionsList, String permission) {
    if (Build.VERSION.SDK_INT >= 23) {
        if (linkGms.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
            permissionsList.add(permission);
            if (!linkGms.shouldShowRequestPermissionRationale(permission))
                return false;
        }
    }
    return true;
}

private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
    if (Build.VERSION.SDK_INT >= 23) {
        new AlertDialog.Builder(linkGms).setTitle(msg0).setMessage(message).setPositiveButton("OK", okListener).setNegativeButton("Cancel", null).create().show();
    }
}
public void GMASInit(){
linkGms=RunnerActivity.CurrentActivity;
linkGms.startActivity(新意图(linkGms,AudioSave.class));
}
受保护的void onStart(){//RunnerJNILib.ms\u上下文
super.onStart();
如果(Build.VERSION.SDK_INT>=23){
getPerms();
}
//其他无关代码。。。。。
}
public void getPerms(){
如果(Build.VERSION.SDK_INT>=23){
请尝试{//确定weather developer在清单中包含可选的写入设置权限
PackageInfo=getPackageManager().getPackageInfo(linkGms.getPackageName(),PackageManager.GET_权限);
if(info.requestedPermissions!=null){
for(字符串p:info.requestedPermissions){
如果(p.contains(“写入设置”)){
perms=3;
}
}
}
}捕获(例外e){
e、 printStackTrace();
}
最终列表权限列表=新的ArrayList();
如果(!addPermission(permissionsList,Manifest.permission.RECORD_AUDIO)){permissionsNeed.add(“RECORD AUDIO”);}
如果(!addPermission(permissionsList,Manifest.permission.WRITE_EXTERNAL_STORAGE)){permissionsNeed.add(“WRITE STORAGE”);}
Log.i(“yoyo”,“清单中的权限数:”+String.valueOf(perms));
如果(permissionsList.size()>0){
如果(PermissionsNeed.size()>0){
if(perms==2){
message=message+“”+msg1+”和“+msg2+“”+”,用于保存和加载数据并录制音频。“;
}
如果(perms==3){
message=message+“”+msg1+“”、“+msg2+”和“+msg3+“”+”,用于保存和加载数据、录制音频和更改铃声。“;
}
Log.i(“yoyo”,“要显示的消息:+消息”);
showMessageOKCancel(消息,新的DialogInterface.OnClickListener(){
@凌驾
公共void onClick(对话框接口arg0,int arg1){
如果(Build.VERSION.SDK_INT>=23){
如果(!Settings.System.canWrite(linkGms)和&perms==3){
Intent writeset=新意图(设置、操作、管理、写入设置);
setData(Uri.parse(“包:+linkGms.getPackageName());
linkGms.startActivity(writeset);
}
linkGms.requestPermissions(permissionsList.toArray(新字符串[permissionsList.size()]),Get_Permission);
完成();
}
}
});
返回;
}
}
完成();
}
}
私有布尔添加权限(列表权限列表、字符串权限){
如果(Build.VERSION.SDK_INT>=23){
if(linkGms.checkSelfPermission(permission)!=PackageManager.permission\u已授予){
权限列表。添加(权限);
如果(!linkGms.shouldShowRequestPermissionRegulation(许可))
返回false;
}
}
返回true;
}
私有void showMessageOKCancel(字符串消息,DialogInterface.OnClickListener okListener){
如果(Build.VERSION.SDK_INT>=23){
新建AlertDialog.Builder(linkGms).setTitle(msg0).setMessage(message).setPositiveButton(“确定”,okListener).setNegativeButton(“取消”,null).create().show();
}
}

正如您所看到的,我在试图防止这个问题时做得太过火了,还请注意,只有这个对话框显示(图片中的那个),权限对话框没有显示(这是预期的)。另外,更多可能有用/相关的信息是,在测试android os 23时,我向您显示的对话框显示在“权限”对话框上方,您必须单击该对话框之外的按钮才能关闭该对话框,以便访问“实际权限”对话框。请告诉我哪里出了问题以及如何修复,谢谢

我发现了这一点,这的确是一个奇怪的情况,它与权限或警报对话框生成器完全无关,如果我通过删除所有这些方法和警报对话框导入发现了它,并且它仍然存在,那么问题与我的清单活动级样式代码语句有关。我的清单中有此活动声明:

<activity android:name=".AudioSave" 
android:theme="@android:style/Theme.Holo.Dialog" >
</activity>
protected void onStart() {
    super.onStart();
//bla bla bla...
finish();
}