【发布时间】:2018-03-15 06:38:37
【问题描述】:
为了让我的应用在所有 Android 版本上运行,我必须在运行时向 Android M 及更高版本请求权限。我正在 Unity 5.6.2 中开发 在我的应用程序的当前版本之前,Google Play 控制台上没有报告任何 ANR,但在我推送了最新的更新后,ANR 的数量有所增加。 我只创建了一个自定义 Activity 类并将权限代码放入其中。我无法理解可能是什么问题以及为什么会发生这么多 ANR。
请参阅下面的代码以询问运行时权限,并告诉我应该针对我的问题实施什么解决方案。您能在代码中看到可能导致此问题的任何内容吗?
public class CustomUnityPlayerActivityForPermissions extends UnityPlayerActivity {
private String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE};
private ArrayList<String> permissionsToRequest = new ArrayList<String>();
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
AskForPermissions();
}
else{
Log.d("TestApp","No Need to Ask for Permissions API Levels < 23");
}
}
public void AskForPermissions(){
Log.d("TestApp","in AskPermission");
for(int i = 0 ; i< permissions.length ; i++)
if (ContextCompat.checkSelfPermission(UnityPlayer.currentActivity,
permissions[i]) != PackageManager.PERMISSION_GRANTED){
permissionsToRequest.add(permissions[i]);
}
if(permissionsToRequest.size()>0) {
Log.d("TestApp", "in AskPermission " + permissionsToRequest.size());
ActivityCompat.requestPermissions(UnityPlayer.currentActivity, permissionsToRequest.toArray(new String[permissionsToRequest.size()]), 1);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
@Override
public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
finish();
}
return;
// other 'case' lines to check for other
// permissions this app might request.
}
}
【问题讨论】:
-
根据我的个人经验,检查运行时权限的代码从未引起 ANR。我认为您的问题出在其他地方...
-
但除了请求运行时权限之外,我没有做任何其他事情。
-
我看不出上面有什么问题。您在 Play 管理中心中的 ANR 报告是否详细说明了发生 ANR 时发生的情况?如果可以,您可以在问题中分享吗?
-
我可以分享,但这无济于事,那些是外来语言:)
标签: android unity3d google-play runtime-permissions