将 android:permission 用于 android.permission.RECEIVE_BOOT_COMPLETED 时的困惑

confusion in using android:permission for android.permission.RECEIVE_BOOT_COMPLETED

请查看以下Maniferst.xml文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pack.saltriver" 
    android:versionCode="1" 
    android:versionName="1.0"
    android:permission="android.permission.RECEIVE_BOOT_COMPLETED">


   <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <receiver android:name=".autostart">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <activity android:name=".hello"></activity>
        <service android:enabled="true" android:name=".service" />
    </application>
 </manifest>

我真的需要同时使用两者吗

android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

它们之间有什么区别?

不,像这样更改您的清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pack.saltriver" 
    android:versionCode="1" 
    android:versionName="1.0">


   <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <receiver android:name=".autostart">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <activity android:name=".hello"></activity>
        <service android:enabled="true" android:name=".service" />
    </application>
 </manifest>

这里是我们为什么要这样做的答案.. documentation

声明可用于限制访问此应用程序或其他应用程序的特定组件或功能的安全权限。

因此,由于您正在访问 Android 的权限,因此您需要使用权限。此元素的文档说明:

请求必须授予应用程序才能使其正常运行的权限。

通常在进行自定义权限时使用(例如,在制作其他应用程序可以绑定的应用程序时,必须限制访问权限),并在您的应用程序实际需要它通常没有的权限时使用.

uses权限即可,不需要在manifest标签中写入权限。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pack.saltriver" 
    android:versionCode="1" 
    android:versionName="1.0">



   <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <receiver android:name=".autostart">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <activity android:name=".hello"></activity>
        <service android:enabled="true" android:name=".service" />
    </application>
 </manifest>