精华内容
下载资源
问答
  • 现在的手机系统五花八门,当我们去请求用户的权限的时候,总是会弹出是否允许的对话框。 而且用户一旦不小心点了拒绝,下次就不再询问了,而很多小白用户也不知道怎么设置。这就导致了很不好的用户体验。 经过...

    现在的手机系统五花八门,当我们去请求用户的权限的时候,总是会弹出是否允许的对话框。

    而且用户一旦不小心点了拒绝,下次就不再询问了,而很多小白用户也不知道怎么去设置。这就导致了很不好的用户体验。

    经过研究,我发现像小米,魅族,这些满大街的系统,都是可以通过隐式意图打开权限设置页面的。

    这里指的是自身app的权限管理页面

    之前已经有人写过类似的文章,不过都比较分散,我这里把这些方法总结了一下。

    不多说,直接上代码。

    首先是最蛋疼的小米,百度了很多前辈留下的方法,发现都不能打开,没有办法,只能通过 adb dumpsys activity activities 命令去查看

    经过一番研究终于打开了。

    /** 
     * 跳转到miui的权限管理页面 
     */  
    private void gotoMiuiPermission() {  
        Intent i = new Intent("miui.intent.action.APP_PERM_EDITOR");  
        //ComponentName componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");  
        //i.setComponent(componentName);  
        i.putExtra("extra_pkgname", getPackageName());  
        try {  
            startActivity(i);  
        } catch (Exception e) {  
            e.printStackTrace();  
            gotoMeizuPermission();  
        }  
    }  
    接下来上魅族的代码

    /** 
     * 跳转到魅族的权限管理系统 
     */  
    private void gotoMeizuPermission() {  
        Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");  
        intent.addCategory(Intent.CATEGORY_DEFAULT);  
        intent.putExtra("packageName", BuildConfig.APPLICATION_ID);  
        try {  
            startActivity(intent);  
        } catch (Exception e) {  
            e.printStackTrace();  
            gotoHuaweiPermission();  
        }  
    }  
    华为的系统由于不太一样,有些系统是华为自己的权限管理,而6.0的是用的原生的权限管理页面,目前手上只有一台6.0的华为手机,

    暂时没有研究到打开的方法,如果有知道的大神麻烦告知一下

    不过打不开没关系,我们可以退而求其次,打开所用应用的权限管理页面

    /** 
     * 华为的权限管理页面 
     */  
    private void gotoHuaweiPermission() {  
        try {  
            Intent intent = new Intent();  
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
            ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity");//华为权限管理  
            intent.setComponent(comp);  
            startActivity(intent);  
        } catch (Exception e) {  
            e.printStackTrace();  
            startActivity(getAppDetailSettingIntent());  
        }  
      
    }  
    
    

    目前也就研究了这三大系统,对于原生系统,和其他系统,如果找不到方法,也可以先把用户引导到系统设置页面

    /** 
     * 获取应用详情页面intent 
     * 
     * @return 
     */  
    private Intent getAppDetailSettingIntent() {  
        Intent localIntent = new Intent();  
        localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
        if (Build.VERSION.SDK_INT >= 9) {  
            localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");  
            localIntent.setData(Uri.fromParts("package", getPackageName(), null));  
        } else if (Build.VERSION.SDK_INT <= 8) {  
            localIntent.setAction(Intent.ACTION_VIEW);  
            localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");  
            localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());  
        }  
        return localIntent;  
    }  


    转自:http://blog.csdn.net/syusikoku/article/details/52886971






    展开全文
  • 相信做过Android的都知道,现在的手机系统五花八门,当我们去请求用户的权限的时候,总是会弹出是否允许的对话框。 而且用户一旦不小心点了拒绝,下次就不再询问了,而很多小白用户也不知道怎么设置。这就导致了...

    相信做过Android的都知道,现在的手机系统五花八门,当我们去请求用户的权限的时候,总是会弹出是否允许的对话框。
    而且用户一旦不小心点了拒绝,下次就不再询问了,而很多小白用户也不知道怎么去设置。这就导致了很不好的用户体验。
    经过研究,我发现像小米,魅族,这些满大街的系统,都是可以通过隐式意图打开权限设置页面的。
    这里指的是自身app的权限管理页面
    之前已经有人写过类似的文章,不过都比较分散,我这里把这些方法总结了一下。
    不多说,直接上代码。
    首先是最蛋疼的小米,百度了很多前辈留下的方法,发现都不能打开,没有办法,只能通过 adb dumpsys activity activities 命令去查看
    经过一番研究终于打开了。

    /** 
     * 跳转到miui的权限管理页面 
     */  
    private void gotoMiuiPermission() {  
        Intent i = new Intent("miui.intent.action.APP_PERM_EDITOR");  
        ComponentName componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");  
        i.setComponent(componentName);  
        i.putExtra("extra_pkgname", getPackageName());  
        try {  
            startActivity(i);  
        } catch (Exception e) {  
            e.printStackTrace();  
            gotoMeizuPermission();  
        }  
    }  

    接下来上魅族的代码

    /** 
     * 跳转到魅族的权限管理系统 
     */  
    private void gotoMeizuPermission() {  
        Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");  
        intent.addCategory(Intent.CATEGORY_DEFAULT);  
        intent.putExtra("packageName", BuildConfig.APPLICATION_ID);  
        try {  
            startActivity(intent);  
        } catch (Exception e) {  
            e.printStackTrace();  
            gotoHuaweiPermission();  
        }  
    }  

    华为的系统由于不太一样,有些系统是华为自己的权限管理,而6.0的是用的原生的权限管理页面,目前手上只有一台6.0的华为手机,
    暂时没有研究到打开的方法,如果有知道的大神麻烦告知一下
    不过打不开没关系,我们可以退而求其次,打开所用应用的权限管理页面

    /** 
     * 华为的权限管理页面 
     */  
    private void gotoHuaweiPermission() {  
        try {  
            Intent intent = new Intent();  
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
            ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity");//华为权限管理  
            intent.setComponent(comp);  
            startActivity(intent);  
        } catch (Exception e) {  
            e.printStackTrace();  
            startActivity(getAppDetailSettingIntent());  
        }  
    
    }  

    目前也就研究了这三大系统,对于原生系统,和其他系统,如果找不到方法,也可以先把用户引导到系统设置页面

    /** 
     * 打开应用详情页面intent 
     */  
    private Intent gotoAppDetailSettingIntent() {  
        Intent localIntent = new Intent();  
        localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
        if (Build.VERSION.SDK_INT >= 9) {  
            localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");  
            localIntent.setData(Uri.fromParts("package", getPackageName(), null));  
        } else if (Build.VERSION.SDK_INT <= 8) {  
            localIntent.setAction(Intent.ACTION_VIEW);  
            localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");  
            localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());  
        }  
        startActivity(localIntent); 
    } 
    展开全文
  • android系统五花八门,当我们去请求用户的权限的时候,总是会弹出是否允许的对话框。 而且用户一旦不小心点了拒绝,下次就不再询问了,而很多小白用户也不知道怎么设置。这就导致了很不好的用户体验。 经过研究...

    android系统五花八门,当我们去请求用户的权限的时候,总是会弹出是否允许的对话框。

    而且用户一旦不小心点了拒绝,下次就不再询问了,而很多小白用户也不知道怎么去设置。这就导致了很不好的用户体验。

    经过研究,我发现像小米,魅族,这些满大街的系统,都是可以通过隐式意图打开权限设置页面的。

    这里指的是自身app的权限管理页面

    之前已经有人写过类似的文章,不过都比较分散,我这里把这些方法总结了一下。

    不多说,直接上代码。

    首先是最蛋疼的小米,百度了很多前辈留下的方法,发现都不能打开,没有办法,只能通过 adb dumpsys activity activities 命令去查看

    经过一番研究终于打开了。

        /**
         * 跳转到miui的权限管理页面
         */
        private void gotoMiuiPermission() {
            Intent i = new Intent("miui.intent.action.APP_PERM_EDITOR");
            ComponentName componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
            i.setComponent(componentName);
            i.putExtra("extra_pkgname", getPackageName());
            try {
                startActivity(i);
            } catch (Exception e) {
                e.printStackTrace();
                gotoMeizuPermission();
            }
        }

     

    接下来上魅族的代码

        /**
         * 跳转到魅族的权限管理系统
         */
        private void gotoMeizuPermission() {
            Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
            try {
                startActivity(intent);
            } catch (Exception e) {
                e.printStackTrace();
                gotoHuaweiPermission();
            }
        }

     

    华为的系统由于不太一样,有些系统是华为自己的权限管理,而6.0的是用的原生的权限管理页面,目前手上只有一台6.0的华为手机,

     

    暂时没有研究到打开的方法,如果有知道的大神麻烦告知一下

    不过打不开没关系,我们可以退而求其次,打开所用应用的权限管理页面

     

        /**
         * 华为的权限管理页面
         */
        private void gotoHuaweiPermission() {
            try {
                Intent intent = new Intent();
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity");//华为权限管理
                intent.setComponent(comp);
                startActivity(intent);
            } catch (Exception e) {
                e.printStackTrace();
                startActivity(getAppDetailSettingIntent());
            }
    
        }

     

    目前也就研究了这三大系统,对于原生系统,和其他系统,如果找不到方法,也可以先把用户引导到系统设置页面

     

        /**
         * 获取应用详情页面intent
         *
         * @return
         */
        private Intent getAppDetailSettingIntent() {
            Intent localIntent = new Intent();
            localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            if (Build.VERSION.SDK_INT >= 9) {
                localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
                localIntent.setData(Uri.fromParts("package", getPackageName(), null));
            } else if (Build.VERSION.SDK_INT <= 8) {
                localIntent.setAction(Intent.ACTION_VIEW);
                localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
                localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());
            }
            return localIntent;
        }

    获取到intent之后直接startactivity就好了。。。

     

    展开全文
  • Android 禁止状态栏下拉

    万次阅读 热门讨论 2017-05-18 18:33:28
    如果你有这样的需求:用户进入你的app以后,所有的操作都是你...我不知道在app中怎么做,但是如果你们的处境像我一样:Android系统是一个针对特殊平台定制的,它一旦启动就进入特定的功能页面,并且不允许用户有进入系统

    如果你有这样的需求:用户进入你的app以后,所有的操作都是你的app中设定的,用户不可以拥有系统设置等行为的能力。然而,android系统,可以通过从顶部往下拉,从而得到一个通知和快速系统设置的页面:
    这里写图片描述
    因此,现在你想禁止它弹出,怎么办呢?
    我不知道在app中怎么做,但是如果你们的处境像我一样:Android系统是一个针对特殊平台定制的,它一旦启动就进入特定的功能页面,并且不允许用户有进入系统设置的能力,那么您可以像下面这样,直接在系统代码中进行修改。

    分析如何解决问题

    使用Android device monitor工具,我们可以看到Android 状态栏的布局,我们会发现,平时我们看到的状态栏(如下图所示)是由PhoneStatusBarView负责绘制个管理的:
    这里写图片描述
    结合我们的操作,当我们点击状态栏或者下拉的时候,都会出现通知界面。而点击和下拉都是触摸事件,因此,理所当然的,我们会想到在PhoneStatusBarView的onTouchEvent中处理相应的逻辑。onTouchEvent定义在frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\PhoneStatusBarView.java中:

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            boolean barConsumedEvent = mBar.interceptTouchEvent(event);
    
            if (DEBUG_GESTURES) {
                if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
                    EventLog.writeEvent(EventLogTags.SYSUI_PANELBAR_TOUCH,
                            event.getActionMasked(), (int) event.getX(), (int) event.getY(),
                            barConsumedEvent ? 1 : 0);
                }
            }
    
            return barConsumedEvent || super.onTouchEvent(event);
        }

    它似乎什么都没有做…然而不要忽视了,它调用了super.onTouchEvent(event)方法。PhoneStatusBarView继承了PanelBar类,这个类继承自PanelBar类。因此,super.onTouchEvent就是调用PanelBar中的onTouchEvent方法,PanelBar也在frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\目录下:

       @Override
        public boolean onTouchEvent(MotionEvent event) {
            // Allow subclasses to implement enable/disable semantics
            if (!panelsEnabled()) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    Log.v(TAG, String.format("onTouch: all panels disabled, ignoring touch at (%d,%d)",
                            (int) event.getX(), (int) event.getY()));
                }
                return false;
            }
    
            // figure out which panel needs to be talked to here
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                final PanelView panel = selectPanelForTouch(event);
                if (panel == null) {
                    // panel is not there, so we'll eat the gesture
                    Log.v(TAG, String.format("onTouch: no panel for touch at (%d,%d)",
                            (int) event.getX(), (int) event.getY()));
                    mTouchingPanel = null;
                    return true;
                }
                boolean enabled = panel.isEnabled();
                if (DEBUG) LOG("PanelBar.onTouch: state=%d ACTION_DOWN: panel %s %s", mState, panel,
                        (enabled ? "" : " (disabled)"));
                if (!enabled) {
                    // panel is disabled, so we'll eat the gesture
                    Log.v(TAG, String.format(
                            "onTouch: panel (%s) is disabled, ignoring touch at (%d,%d)",
                            panel, (int) event.getX(), (int) event.getY()));
                    mTouchingPanel = null;
                    return true;
                }
                startOpeningPanel(panel);
            }
            final boolean result = mTouchingPanel != null
                    ? mTouchingPanel.onTouchEvent(event)
                    : true;
            return result;
        }

    从函数的名字猜测,startOpeningPanel方法似乎就是弹出下拉菜单的入口,把它注释掉,重新编译SystemUI模块,然后替换/system/priv-app/SystemUI/SystemUI.apk,重启系统,就发现无论你是点击还是下拉屏幕顶部,都不会出现下拉也面了。
    我们不妨简单分析下这里:
    startOpeningPanel接收一个panel作为参数,而这个panel则是selectPanelForTouch(event);方法返回的。
    PhoneStatusBarView中覆写了该方法:

    
        @Override
        public PanelView selectPanelForTouch(MotionEvent touch) {
            // No double swiping. If either panel is open, nothing else can be pulled down.
            return mNotificationPanel.getExpandedHeight() > 0
                    ? null
                    : mNotificationPanel;
        }

    可以看到,这里返回的是mNotificationPanel。是的它就是下面的样子:
    这里写图片描述
    既然我们在这里得到了这个页面,startOpeningPanel应该就是将这个页面呈现出来吧。
    startOpeningPanel如下:

        // called from PanelView when self-expanding, too
        public void startOpeningPanel(PanelView panel) {
            if (DEBUG) LOG("startOpeningPanel: " + panel);
            mTouchingPanel = panel;
            mPanelHolder.setSelectedPanel(mTouchingPanel);
            for (PanelView pv : mPanels) {
                if (pv != panel) {
                    pv.collapse(false /* delayed */);
                }
            }
        }

    对所有的PanelView ,调用它的collapse方法,改方法如下:

        public void collapse(boolean delayed) {
            if (DEBUG) logf("collapse: " + this);
            if (mPeekPending || mPeekAnimator != null) {
                mCollapseAfterPeek = true;
                if (mPeekPending) {
    
                    // We know that the whole gesture is just a peek triggered by a simple click, so
                    // better start it now.
                    removeCallbacks(mPeekRunnable);
                    mPeekRunnable.run();
                }
            } else if (!isFullyCollapsed() && !mTracking && !mClosing) {
                cancelHeightAnimator();
                mClosing = true;
                notifyExpandingStarted();
                if (delayed) {
                    postDelayed(mFlingCollapseRunnable, 120);
                } else {
                    fling(0, false /* expand */);
                }
            }
        }

    如果我们正在下拉,同时下拉的动画不为空,那么会调用mPeekRunnable.run();

        private Runnable mPeekRunnable = new Runnable() {
            @Override
            public void run() {
                mPeekPending = false;
                runPeekAnimation();
            }
        };

    调用runPeekAnimation:

       private void runPeekAnimation() {
            mPeekHeight = getPeekHeight();
            if (DEBUG) logf("peek to height=%.1f", mPeekHeight);
            if (mHeightAnimator != null) {
                return;
            }
            mPeekAnimator = ObjectAnimator.ofFloat(this, "expandedHeight", mPeekHeight)
                    .setDuration(250);
            mPeekAnimator.setInterpolator(mLinearOutSlowInInterpolator);
            mPeekAnimator.addListener(new AnimatorListenerAdapter() {
                private boolean mCancelled;
    
                @Override
                public void onAnimationCancel(Animator animation) {
                    mCancelled = true;
                }
    
                @Override
                public void onAnimationEnd(Animator animation) {
                    mPeekAnimator = null;
                    if (mCollapseAfterPeek && !mCancelled) {
                        postOnAnimation(new Runnable() {
                            @Override
                            public void run() {
                                collapse(false /* delayed */);
                            }
                        });
                    }
                    mCollapseAfterPeek = false;
                }
            });
            notifyExpandingStarted();
            mPeekAnimator.start();
            mJustPeeked = true;
        }
    

    这里使用了属性动画将它移动到指定的高度上。

    展开全文
  • 登录官网页面,单击“安装到WPS”(图1),然后根据浏览器安全设置的不同,系统可能会弹出询问对话框,请单击“允许”按钮,以将WPS化学助手安装到WPS2010中。 图1 二、插入化学反应方程式 为WPS2...
  • 现在,很多的企业都在使用企业微信开...但是如果直播发起人在开启直播时设置允许观众视频发言时,我们点击直播页面的发言图标, 申请发言时,微信中会弹出一个窗口,提示是否需要开启摄像头,这时我们可以选择不...
  • 问答时间1、创建活动地点或签到时,弹出是否允许小程序使用手机GPS权限时不小心点了否,导致无法定位怎么办?答:在小程序首页,点击右上角“三个点”,选择“关于志愿龙口”;再点击页面右上角“三个点”,选择...
  • rrequest.getWResponse().getMessageCollector().alert("输入的年龄:"+age+"起范围,只能输入10到20之间的数字",null,true); } }catch(NumberFormatException nfe) { rrequest....
  • 然而,Android系统,可以通过从顶部往下拉,从而得到一个通知和快速系统设置页面:因此,现在你想禁止它弹出,怎么办呢?我不知道在app中怎么做,但是如果你们的处境像我一样:android系统是一个针对特殊平台定制的...
  • BOS常见问题FAQ

    2019-04-11 15:48:13
    四、使用portal需要允许正常弹出窗口,如何设置 五、特殊环境下的特殊设置 六、portal使用需要什么版本的JDK 七、IE外部插件对portal使用有影响吗 八、IE7下, Portal上出现按钮显示问题(比如应该是被激活的...
  • UIWebView的使用代码

    2015-12-15 08:54:12
    IOS中,在页面元素中进行长按操作,safari会弹出菜单,来允许进行选择行为。禁用此行为代码 ? 1 2 3 .disable-select{ -webkit-user-select:none; } 或在webViewDidFinisheLoad中使用 ? 1 [webView ...
  • bugzilla使用说明

    2012-11-05 10:31:41
    高级查询,可以根据不同bug参数结合来进行查询,这个就比较复杂了,但也不是很难理解,因为多数参数我们在new一个bug的时候已经都看到怎么设置了,相应的在这里我们设置查询条件即可。 以列表列的条件都是可以多选...
  • Nginx安装包

    2017-09-01 14:17:19
    其中maxInactiveIntervalInSeconds是设置session有效时间,以秒为单位,但实际上无论怎么设,session真实有效时间还是会比我们设置的稍微长一些。 1 <?xml version="1.0" encoding="UTF-8"?> 2 5 ...
  •  file_dialog_start_handler : file_dialog_start_function, 当文件选取对话框弹出前出发的事件处理函数  file_queued_handler : file_queued_function,  file_queue_error_handler : file_queue_error_function...
  • EXT2.0中文教程

    2011-07-28 09:20:05
    5.4. 让弹出窗口,显示我们想要的东东,比如表格 5.4.1. 2.0的弹出表格哦 5.4.2. 向2.0的window里加表格 5.4.3. 1.x里的叫做BasicDialog 5.4.4. 把form放进对话框里 6. 奔腾吧!让不同的浏览器里显示一样的布局。 ...
  • 症状:电脑与电脑间可以Ping通,但无法访问共享资源,在“计算机管理”中查看“本地共享”后会弹出“没有启动服务器服务”的错误对话框。 解决:在控制面板-管理工具-服务中启动Server服务。并设置“启动类型”为...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

怎么设置允许弹出页面