【问题标题】:Android application permission settingsAndroid应用权限设置
【发布时间】:2026-02-23 14:15:02
【问题描述】:

我的内部 android 应用程序在 Samsung Tab S2 上运行良好,它自动获得访问设备“存储”和“位置”的权限。但是,当我在较新的三星 Galaxy Tab S7 上安装应用程序时,我必须在设置中手动提供该应用程序的权限。默认情况下,它设置为“不允许权限”我如何自动执行此操作。 AndroidManifest.xml 有以下设置

  <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="22"/>

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

【问题讨论】:

标签: android samsung-galaxy


【解决方案1】:

在 android M 发布后,Android 权限发生了根本性的变化。在此之前,开发者可以简单的将AndroidManifesto文件中的所有权限卡住,而用户在安装应用程序之前,必须批准所有权限才能运行应用程序。

但是,现在情况不同了。 Android 期望这些权限将在运行时授予,即当需要该权限的功能被执行时,它首先请求该权限,并根据用户的回复处理该权限。如果获得许可,那很好。如果没有,则只需显示一条消息,可能说明此功能在没有该权限的情况下将不起作用。在这种情况下,由于用户已经拒绝了权限,他/她现在必须进入设置以启用先前拒绝的权限。

【讨论】:

    【解决方案2】:

    您必须向用户授予权限。您可以在 Fragment 中使用它:

    Java:

    if (ActivityCompat.checkSelfPermission(getContext(),
            android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) != PackageManager.PERMISSION_GRANTED) {
         requestPermissions(getActivity(),
                new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_LOCATION);
    } else {
        Log.e("DB", "PERMISSION GRANTED");
    }
    

    科特林:

    if (ActivityCompat.checkSelfPermission(getContext(),
                        Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(getActivity(), arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
                    REQUEST_LOCATION)
        } else {
            Log.e("DB", "PERMISSION GRANTED")
        }
    

    Activity内部:

    Java:

    int checkPermission= ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA);
    if (checkPermission!= PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions((Activity)getContext(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
    }
    else {
        Log.e("DB", "PERMISSION GRANTED")
    }
    

    科特林:

        val checkPermission = ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA)
    if (checkPermission != PackageManager.PERMISSION_GRANTED)
    {
      ActivityCompat.requestPermissions(getContext() as Activity, arrayOf<String>(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_LOCATION)
    }
    else
    {
      Log.e("DB", "PERMISSION GRANTED")
    }
    

    【讨论】: