Facebook 3.0:如何在android上检测用户取消权限对话框

Facebook 3.0:如何在android上检测用户取消权限对话框,android,facebook,permissions,dialog,Android,Facebook,Permissions,Dialog,我不知道如何检测用户取消了Android上的权限请求对话框 有人知道我需要调用什么函数来检查这一点吗?当取消facebook权限对话框时,最好将回调合并到facebook源代码中,以便处理 您可以在此处获取最新来源: 第一件事:这个问题有点老了,这个答案假设您使用的是更新的版本(我现在使用的是3.7)。使用SDK的3.0版本可能可以做到这一点,但您应该尝试将您在项目中使用的Facebook SDK更新为较新的版本,因为自3.0以来,Facebook SDK添加了很多功能和修复 我正在使用Sess

我不知道如何检测用户取消了Android上的权限请求对话框


有人知道我需要调用什么函数来检查这一点吗?

当取消facebook权限对话框时,最好将回调合并到facebook源代码中,以便处理

您可以在此处获取最新来源:

第一件事:这个问题有点老了,这个答案假设您使用的是更新的版本(我现在使用的是3.7)。使用SDK的3.0版本可能可以做到这一点,但您应该尝试将您在项目中使用的Facebook SDK更新为较新的版本,因为自3.0以来,Facebook SDK添加了很多功能和修复

我正在使用
Session.StatusCallback
来侦听
Session
生命周期更改,我将其注册到一个
UiLifecycleHelper
,该工具提供活动的更新

当用户完成与权限对话框的交互后,
UiLifecycleHelper
将触发更新,调用它已注册的
Session.StatusCallback.call(Session,SessionState,Exception)
实例上的
方法。为了检测用户取消权限请求,您可以处理传递给此方法的
异常

在我的代码中,我在发布时是这样做的,但读取权限请求应该类似:

@Override
public void call(Session session, SessionState state,Exception exception) 
{
    if(exception != null)
    {
        if(exception instanceof FacebookOperationCanceledException)
        {
            //make sure we don't continue posting
            posting = false;
            //the user cancelled it, no need to show a message or do anything
            return;
        }
        else if(exception instanceof FacebookAuthorizationException)
        {
            Toast.makeText(FacebookActivity.this, "Failed to obtain Facebook permission to post on your behalf", Toast.LENGTH_LONG).show();
            //don't continue posting, let the user retry it if he/she wants to
            posting = false;
            return;
        }
    }

    //continue with checking that all permissions have been granted and post the action
}
我在的答案中找到了该信息,但我以不同的方式处理
FacebookAuthorizationException

此外,如果您在发布或使用其他扩展权限时恢复
会话
,我发现检查SDK给出的结果很有用,因为用户可能已从其他地方(如Facebook网站)取消了权限。当后一种情况发生时,应用程序中的
会话
对象将指示它仍然拥有权限(例如
发布操作
),而实际上它不再拥有该权限。当
会话
对象被缓存且其中的数据不新鲜时,就会发生这种情况

这就是我正在做的,以检查权限是否丢失(即它已从其他地方删除,而不是从应用程序中删除):

//注意:
//我将返回空值,因为
//此代码在异步任务中运行
请求=新请求(
一场
graphPath,
params,
HttpMethod.POST);
Response=request.executeAndWait();
GraphObject responseObject=response.getGraphObject();
if(responseObject==null)
{
FacebookRequestError fbre=response.getError();
if((fbre!=null)&&(fbre.getCategory()==Category.PERMISSION))
{
requestFacebookPermissions(会话);
返回null;
}
其他的
{
post失败();
返回null;
}
}
//note:
//I'm returning null further down the line because
//this code is run in an AsyncTask<Void,Void,Void>

Request request = new Request(
    session,
    graphPath,
    params,
    HttpMethod.POST);
Response response = request.executeAndWait();
GraphObject responseObject = response.getGraphObject();

if(responseObject == null)
{
    FacebookRequestError fbre = response.getError();
    if((fbre!=null) && (fbre.getCategory() == Category.PERMISSION))
    {
        requestFacebookPermissions(session);
        return null;
    }
    else
    {
        postFailed();
        return null;
    }
}