我无法知道如何检测到用户已取消Android上的权限请求对话框。
有谁知道我需要调用哪个函数来检查它?
答案 0 :(得分:2)
第一件事:问题有点陈旧,这个答案假设您使用的是更新版本(我现在使用的是3.7)。可能使用3.0版本的SDK来执行此操作,但您应该尝试将您在项目中使用的Facebook SDK更新为更新版本,因为它们自3.0以来添加了很多功能和修复。/ EM>
我使用Session.StatusCallback
来监听Session
生命周期更改,我注册了UiLifecycleHelper
,为我的活动提供更新。
当用户与权限对话框完成交互时,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
}
我在this question的答案中找到了相关信息,但我对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;
}
}
答案 1 :(得分:0)
当Facebook权限对话框被取消时,您可能最好将某些回调合并到Facebook来源中进行处理。
您可以在此处提取最新资讯来源:
https://github.com/facebook/facebook-android-sdk/tree/master/facebook