[英]issue with Runtime Permission
我不知道為什么,但是我的運行時權限代碼不起作用。 沒有出現彈出。 出現進度條,即表示我接受許可。
誰能幫我?
謝謝大家!
我給你看我的代碼:!
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the custom_spinner_items for this fragment
View rootView = inflater.inflate(R.layout.fragment_four, container, false);
Button mButton = (Button) rootView.findViewById(R.id.cazzo);
mButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (hasPermissions()) {
// our app has permissions.
FiveFragment ff = new FiveFragment();
numeroTavolo = ff.showResultTavolo(v);
MyListFragment mlf = new MyListFragment();
/* try {
mlf.showResultTotale(v);
} catch (IOException e) {
e.printStackTrace();
}*/
string2 = mlf.showResultTotale2(v);
totalepizze = mlf.showResultTotale(v);
ThreeFragment tf = new ThreeFragment();
string4 = tf.showResult(v);
totalebibite = tf.showResult2(v);
processingDialog.show();
mProgressbarAsync = new MakePDF();
mProgressbarAsync.execute();
new MakePDF(getContext()).execute();
} else {
//our app doesn't have permissions, So i m requesting permissions.
requestPerms();
}
/* FiveFragment ff = new FiveFragment();
numeroTavolo = ff.showResultTavolo(v);
MyListFragment mlf = new MyListFragment();
*//* try {
mlf.showResultTotale(v);
} catch (IOException e) {
e.printStackTrace();
}*//*
string2 = mlf.showResultTotale2(v);
totalepizze = mlf.showResultTotale(v);
ThreeFragment tf = new ThreeFragment();
string4 = tf.showResult(v);
totalebibite = tf.showResult2(v);
*/
/* string4=tf.showResult(v);
totalebibite=tf.showResult2(v);*/
/* processingDialog.show();
mProgressbarAsync = new MakePDF();
mProgressbarAsync.execute();
new MakePDF(getContext()).execute();*/
}
});
TextView titolo2 = (TextView) rootView.findViewById(R.id.result2);
return rootView;
}
關於權限的代碼:
private void requestPerms(){
String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
requestPermissions(permissions,PERMS_REQUEST_CODE);
}
}
private boolean hasPermissions(){
int res = 0;
//string array of permissions,
String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
for (String perms : permissions){
res = checkCallingOrSelfPermission(getContext(),perms);
if (!(res == PackageManager.PERMISSION_GRANTED)){
return false;
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
boolean allowed = true;
switch (requestCode){
case PERMS_REQUEST_CODE:
for (int res : grantResults){
// if user granted all permissions.
allowed = allowed && (res == PackageManager.PERMISSION_GRANTED);
}
break;
default:
// if user not granted permissions.
allowed = false;
break;
}
if (allowed){
//user granted all permissions we can perform our task.
//makeFolder();
FiveFragment ff = new FiveFragment();
numeroTavolo = ff.showResultTavolo(v);
MyListFragment mlf = new MyListFragment();
/* try {
mlf.showResultTotale(v);
} catch (IOException e) {
e.printStackTrace();
}*/
string2 = mlf.showResultTotale2(v);
totalepizze = mlf.showResultTotale(v);
ThreeFragment tf = new ThreeFragment();
string4 = tf.showResult(v);
totalebibite = tf.showResult2(v);
processingDialog.show();
mProgressbarAsync = new MakePDF();
mProgressbarAsync.execute();
new MakePDF(getContext()).execute();
}
else {
// we will give warning to user that they haven't granted permissions.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
Toast.makeText(getContext(), "Storage Permissions denied.", Toast.LENGTH_SHORT).show();
}
}
}
}
請嘗試此操作對我有利。
我正在使用Fragment中的Contact權限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (context.checkSelfPermission(Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) { runReadContact(); } else { ActivityCompat.requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, MyActivity.PERMISSION_CODE); } } else { runReadContact(); }
像這樣在MyActivity(Activity Class)中使用onRequestPermission()
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case MyActivity.PERMISSION_CODE: if (grantResults.length > 0) if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { runReadContact(); } } break; } }
如果您想在片段中使用onRequestPermission(),我們需要注意。
1)android.support.v4.app.Fragment; =>導入android.app.Fragment
2)FragmentCompat.requestPermissions(...)
3)您可以在片段中使用此“ onRequestPermissionsResult(...)”。
您的tarketSdkVersion是什么?
需要運行時權限(23> = tarketSdkVerison)
並檢查您的應用,
移動“電話>設置>應用>您的應用>權限”
您拒絕您的許可。 然后您運行您的應用
希望這能解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.