我的应用程序将检查是否启用了播放保护设置。
public static boolean checkGooglePlayProtectSettings(Context context){
final boolean[] enabled = new boolean[]{false};
try{
SafetyNet.getClient(context).isVerifyAppsEnabled().addOnCompleteListener(new OnCompleteListener<SafetyNetApi.VerifyAppsUserResponse>() {
@Override
public void onComplete(@NonNull Task<SafetyNetApi.VerifyAppsUserResponse> task) {
if(task.isSuccessful()){
SafetyNetApi.VerifyAppsUserResponse result = task.getResult();
if(result != null){
if(result.isVerifyAppsEnabled()){
enabled[0] = true;
}else{
enabled[0] = false;
}
}
}else{
Log.e("GoogleProtectPermission", "A general error occurred.");
}
}
});
}catch (Exception e){
e.printStackTrace();
}
if (enabled[0]){
Log.d("GoogleProtectPermission", "Is enabled");
}else {
Log.d("GoogleProtectPermission", "Is disabled");
}
return false;
}
在这种情况下,我尝试将最终结果记录下来,但是在记录结果中始终不处于活动状态,如何获得良好的结果以检查play prtoect是否处于活动状态?
答案 0 :(得分:0)
isVerifyAppsEnabled()
方法是异步的,它调用OnCompleteListener
的{{1}}方法来通知结果准备就绪。
很有可能在触发onComplete
之前执行了此块,因此此时OnCompleteListener
的值保持不变。
enabled[0]
由于没有同步方法来获取结果,因此您可能不得不以某种方式更改方法,以考虑到这种异步性,并在回调结果就绪或(高度不推荐 )执行屏蔽等待,直到if (enabled[0]) {
Log.d("GoogleProtectPermission", "Is enabled");
} else {
Log.d("GoogleProtectPermission", "Is disabled");
}
返回的Task
完成。
此外,不管这个问题,在您当前的代码中,使用布尔数组而不是仅仅使用布尔数组似乎都没有意义
isVerifyAppsEnabled
可以简化为if(result.isVerifyAppsEnabled()) {
enabled[0] = true;
} else {
enabled[0] = false;
}
答案 1 :(得分:-1)
您可以这样:
final StringBuilder sb = new StringBuilder();
...
if(result.isVerifyAppsEnabled()){
sb.append("good");
}else{
sb.append("bad");
}
...
if(sb.toString().equals("good")){
Log.d("GoogleProtectPermission", "Is enabled");
}
if(sb.toString().equals("bad")){
Log.d("GoogleProtectPermission", "Is disabled");
}
已编辑: 是的,正如评论所指出的,我的答案是错误的。所以有两种方法:
1直接输出日志信息
if(result.isVerifyAppsEnabled()){
Log.d("GoogleProtectPermission", "Is enabled");
}else{
Log.d("GoogleProtectPermission", "Is disabled");
}
2使用接口回调
public interface Callback { //add an interface
void onResponse(String message);
}
final StringBuilder sb = new StringBuilder();
...
if(result.isVerifyAppsEnabled()){
sb.append("good");
}else{
sb.append("bad");
}
callback.onResponse(sb.toString()); //add this line
并在某个位置订阅该界面。