3

我无法知道如何检测用户已取消 Android 上的权限请求对话框。

有谁知道我需要调用什么函数来检查这个?

4

2 回答 2

2

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

我正在使用 aSession.StatusCallback来监听Session生命周期变化,我将其注册到UiLifecycleHelper为我的活动提供更新的 a 中。

UiLifecycleHelper用户完成与权限对话框的交互时,将触发更新,在它已注册的实例Session.StatusCallback.call(Session, SessionState, Exception)上调用您的方法。Session.StatusCallback为了检测用户取消权限请求,您可以处理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不同。

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

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

//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;
    }
}
于 2014-03-13T13:53:26.417 回答
0

当 Facebook 权限对话框被取消时,您最好将一些回调合并到 facebook 源中以进行处理。

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

https://github.com/facebook/facebook-android-sdk/tree/master/facebook

于 2013-03-18T23:47:52.893 回答