android - 当应用程序自动启用它们时,如何在 native react 中获取应用程序权限的系统警报

标签 android react-native android-manifest android-permissions

当应用程序自动启用它们时,如何在 React Native 中获取应用程序权限的系统警报?

import { PermissionsAndroid } from 'react-native';
import Config from '../models/Config';

// Permission param must be provided from Android Docs. Ex: READ_CONTACTS
export const requestPermission=async(permission='READ_CONTACTS')=> {
  try {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS[permission],
    )
    if(granted=='never_ask_again'){
        Config.setPermission(false);
    }
    return granted;
  }catch (err) {
    console.log(err);
    //alert plz give the suitable permission
  }
}

在构建应用程序时,我希望收到有关应用程序权限的系统警报。但是当我查看应用程序权限设置时,应用程序系统警报没有出现,它已经启用。谢谢。

最佳答案

这是您获得通知的方式,代码的前几行是检查我们是否有 SD 卡,然后我们开始处理您在 Android Manifest 文件中设置的权限我不会包含该代码

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            //.... write file into storage ...
            System.out.println("SDK > BuildVersion TRUE");
        } else {
            requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 666);  // Comment 26
            System.out.println("go to requestPermissions");
        }
    }
    onLoad();
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {

        case 666: // Allowed was selected so Permission granted
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                Snackbar s = Snackbar.make(findViewById(android.R.id.content),"Permission Granted",Snackbar.LENGTH_LONG);
                View snackbarView = s.getView();
                TextView textView = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);
                textView.setTextColor(Color.RED);
                textView.setTextSize(18);
                textView.setMaxLines(6);
                s.show();

                // do your work here

            } else if (Build.VERSION.SDK_INT >= 23 && !shouldShowRequestPermissionRationale(permissions[0])) {
                // User selected the Never Ask Again Option Change settings in app settings manually
                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
                alertDialogBuilder.setTitle("Change Permissions in Settings");
                alertDialogBuilder
                        .setMessage("Click SETTINGS to Manually Set\n\n"+"Permissions to use Database Storage")
                        .setCancelable(false)
                        .setPositiveButton("SETTINGS", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                                Uri uri = Uri.fromParts("package", getPackageName(), null);
                                intent.setData(uri);
                                startActivityForResult(intent, 1000);     // Comment 3.
                            }
                        });

                AlertDialog alertDialog = alertDialogBuilder.create();
                alertDialog.show();

            } else {
                    // User selected Deny Dialog to EXIT App ==> OR <== RETRY to have a second chance to Allow Permissions
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {

                    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
                    alertDialogBuilder.setTitle("Second Chance");
                    alertDialogBuilder
                            .setMessage("Click RETRY to Set Permissions to Allow\n\n"+"Click EXIT to the Close App")
                            .setCancelable(false)
                            .setPositiveButton("RETRY", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    //ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, Integer.parseInt(WRITE_EXTERNAL_STORAGE));
                                    Intent i = new Intent(MainActivity.this,MainActivity.class);
                                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                                    startActivity(i);
                                    }
                            })
                            .setNegativeButton("EXIT", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    finish();
                                    dialog.cancel();
                                }
                            });
                    AlertDialog alertDialog = alertDialogBuilder.create();
                    alertDialog.show();
                }
            }
            break;
    }};

关于android - 当应用程序自动启用它们时,如何在 native react 中获取应用程序权限的系统警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46603754/

相关文章:

android - FCM(Firebase 云消息传递)使用 Asp.Net 推送通知

java - 将 java.util.function.Function 转换为 Kotlin 的函数式接口(interface)类型

android - 使用react-native检查手机上是否安装了Metamask应用程序

android - 错误 : unknown element <intent-filter> found after upgrading to android 3. 1

Android:应用名称显示第一页名称,而不是应用名称

android - 如何添加两个android :name attributes to Application tag in Manifest file?

java - Android - 编译错误变量无法应用

android - 无法获得在 android 中设置的特定日期和时间的通知

ios - Xcode Interface Builder 缺少导航

react-native - React Navigation v5 setOptions 不起作用