我已经审核了有关Android权限的其他问题。但我仍然没有得到片段的解决方案。为什么没有出现权限对话框?此外,它不显示任何错误日志。它只是没有出现。
我不想使用FragmentCompat,因为它需要 import android.app.Fragment
这是我的最低sdk版本。 minSdkVersion 16
import android.support.v4.app.Fragment;
public class ComplaintFragment extends Fragment implements View.OnClickListener {
private void StartCamera(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, PERMISSIONS_CAMERA);
}
else {OpenCamera();}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(ActivityCompat.checkSelfPermission(getActivity(), permissions[0]) == PackageManager.PERMISSION_GRANTED) {
switch (requestCode) {
case PERMISSIONS_CAMERA:
OpenCamera();
break;
}
}
}
}
答案 0 :(得分:1)
试试这个,
1)在你的清单中给予相机许可。
<uses-permission android:name="android.permission.CAMERA" />
2)检查是否授予许可。
if(ContextCompat.checkSelfPermission(this,android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{android.Manifest.permission.CAMERA},1);
return;
} else {
oprnCamere();
}
3)Handel来自片段类中onActivityResult()方法的请求权限的结果。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 0: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//permission accepted.
openCamera()
} else {
//permission denied.
}
return;
}
}
}
答案 1 :(得分:0)
也许你可以尝试复制
<uses-permission android:name="android.permission.CAMERA" />
给你的表现者
答案 2 :(得分:0)
在你的build.gradle(应用程序级别)中放置此代码(targetSdkVersion 23)
defaultConfig {
applicationId "com.example.sampleproject"
minSdkVersion 9
targetSdkVersion 23
}
答案 3 :(得分:0)
我在onRequestPermissionsResult
上重写了你的功能。请尝试:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case PERMISSIONS_CAMERA:
if (getActivity().checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)
//Camera permission grant
OpenCamera();
else
Log.e("error","Oop something wrong with permission");
break;
}
同时检查this link。它可能有助于回答您的问题。
答案 4 :(得分:0)
onRequestPermissionsResult
已弃用。您现在应该使用 Activity Result 在片段中请求权限。
她是一个简单的实现:
class MyFragment : Fragment {
private val cameraPermissionResultReceiver = registerForActivityResult(ActivityResultContracts.RequestPermission()) {
if (it) {
// permission granted
} else {
// permission denied
}
}
}
private fun requestCameraPermission() {
cameraPermissionResultReceiver.launch(Manifest.permission.CAMERA)
}
}