我正在测试Android的许可系统。我刚刚用ServerManagedPolicy编译了示例项目,我有一个问题: 如果我这样做:
Device's Internet=ON
Launch the app
Launch the check= Allow access
Device's Internet=OFF
Relaunch app and check= Allow access
好了,现在让我们看看问题:
Device's Internet=OFF
Launch the app
Launch the check= Don't allow access
逻辑上我不想那样。因为如果用户在没有互联网的情况下启动应用程序,该应用程序将被阻止,即使它已获得许可。我怎么解决这个问题?我的应用程序需要连接到Internet才能工作,因此延迟检查没有问题
答案 0 :(得分:4)
您可以使用带有handleResponse()的自定义LicenseValidator类,只有当策略返回LicenseResponse.NOT_LICENSED时才会在License检查器回调上调用dontAllow(),并在所有其他情况下调用allow(),包括网络错误。
public class LicenseValidator {
...
public void handleResponse(LicenseResponse response, ResponseData rawData) {
mPolicy.processServerResponse(response);
if (mPolicy.allowAccess()) {
mCallback.allow();
} else if (response == LicenseResponse.NOT_LICENSED) {
mCallback.dontAllow();
}
}
并使用自定义策略而不是ServerManagedPolicy:
public class MyPolicy {
private LicenseResponse mLastResponse;
public MyPolicy(Activity activity) {
mLastResponse = LicenseResponse.RETRY;
}
public void processServerResponse(LicenseResponse response) {
mLastResponse = response;
}
public boolean allowAccess() {
return (LicenseResponse.LICENSED.equals(mLastResponse));
}
}
我做的很少,而且效果很好。