单击按钮时,不会更新授予的摄像机权限

时间:2017-06-15 20:18:36

标签: java android

抱歉,这对你来说可能是一个微不足道的问题,但我不能这样做,所以请耐心等待。我正在创建这个片段布局,欢迎用户使用按钮。如果用户单击按钮(名为;相机),则应用程序应显示弹出消息以授予或拒绝相机权限。如果授予了权限,则该按钮应该滑动并隐藏。如果拒绝,则显示Toast消息。现在,我能够显示弹出消息以询问权限,但是当用户授予权限时,它不会滑动按钮并隐藏。但是,当我再次单击该按钮时,它将滑动并隐藏。看起来当我调用manageCameraPerm()方法时,它不会立即更新。任何帮助都将很高兴。谢谢。

这是我的片段类

@Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.cameraPerm:
                manageCameraPerm();
                if ((ActivityCompat.checkSelfPermission(getContext(),
                        android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)) {

                    v.startAnimation(animSlide);
                    allowCamera.setVisibility(View.GONE);
                    w = 1;
                }
                break;
     }
 }

//这是我的manageCameraPerm方法

 private void manageCameraPerm() {
        if (ActivityCompat.checkSelfPermission(getContext(),
                android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

            requestPermissions(new String[]{Manifest.permission.CAMERA},
                    MY_PERMS_REQUEST_CAMERA);


        } else {

            Toast.makeText(getActivity(), "Camera is enabled", Toast.LENGTH_LONG).show();

        }
    }

3 个答案:

答案 0 :(得分:0)

这是因为检查权限是否被授予的if语句恰好在弹出窗口出现之后(当然还没有授予权限)。您需要在onPermissionResult中触发动画(请参阅此处的“处理权限请求响应”部分:https://developer.android.com/training/permissions/requesting.html

答案 1 :(得分:0)

假设您正在使用Marshmallow或更高版本的设备,您必须通过回调方法onRequestPermissionsResult()处理UI代码(在此情况下设置动画然后隐藏按钮),负责在提出请求后立即检查是否授予权限:

var QuestionSchema = Schema({
    id          : ObjectId,
    title       : String,
    employees   : [{ type: ObjectId, ref: 'User'}]
});

var UserSchema = Schema({
    username    : String,
    //response    : String,
    questions   : [{ type: ObjectId, ref: 'Question'}]
});  

//new schema/collection I've had to create
var AnswerSchema = Schema({
    response    : {type :String, default:null},
    question    : { type: ObjectId, ref: 'Question'},
    employees   : [{ type: ObjectId, ref: 'User'}],
})

module.exports = mongoose.model('Question', QuestionSchema);
module.exports = mongoose.model('User', UserSchema);
module.exports = mongoose.model('Answer', AnswersSchema);

...以及您的manageCameraPerm()方法:

Question.findOne({ title: 'Should we buy a coffee machine?'}).exec(function(err, question) {
          //example data
          var user = new User([{
            "username": "lindelof",
            "response": "yes",
          },{
            "username": "bailly",
            "response": "no",
          },{
            "username": "suzan",
            "response": "yes",
          }]);

          question.employees = [user1._id];
          user.questions = [question._id];

          question.save(function(err) {
              if (err) throw err;
              console.log(question);
              user1.save(function(err) {
                  if (err) throw err;
              });
          });

        });
        console.log('entry saved >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
    }

答案 2 :(得分:0)

在android中使用premission并不是那么简单。有一些库可以让它更容易:https://github.com/hotchemi/PermissionsDispatcher 只需使用这个库!