【发布时间】:2018-11-29 07:24:43
【问题描述】:
我正在两台不同的计算机上开发应用程序,并使用 github 使用 Android Studios git 工具同步项目。 从辅助工作站运行我的应用程序后,我无法立即获得权限。
似乎 ActivityCompat.checkSelfPermission() 会返回 true,即使应用程序没有所需的权限,这也会导致应用程序跳过 ActivityCompat。 requestPermissions() 方法。
每次我切换工作站时,Android Studio 都会要求我重新安装应用程序,因为签名不匹配或其他原因。我假设应用程序可能会记住旧权限,即使它没有获得新权限?
compileSdkVersion 27
minSdkVersion 19
targetSdkVersion 27
当我没有权限时,为什么 ActivityCompat.checkSelfPermission() 返回 true?
我在 oncreate() 方法中请求 MainActivity 中的所有权限:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.INTERNET)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.INTERNET}, 123);
Toast.makeText(this, "This app needs camera and storage permissions", Toast.LENGTH_LONG).show();
}else{
onCreateAfterPermission();
}
}
然后我处理响应:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 123) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
onCreateAfterPermission();
}else{
// close the app
Toast.makeText(this, "Sorry!!!, you can't use this app without granting permissions", Toast.LENGTH_LONG).show();
this.finish();
}
}
}
【问题讨论】:
-
你有什么问题。或检查将所有权限定义到android清单文件中。
-
无需为
INTERNET询问运行时权限 -
分享 onCreateAfterPermission();代码
标签: android android-permissions