Какой лучший способ определить разрешение в Android?

Я хочу начать свою деятельность ON_BOOT_COMPLETED. Теперь я столкнулся с одной странной проблемой.

Если я укажу разрешение на загрузку вне тега приемника, вне тега приложения. Активность начинается. следующий

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.broadcaststaticdemo.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name="com.example.broadcaststaticdemo.StartAppOnBoot" >
<intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
    <category android:name="android.intent.category.HOME" />
</intent-filter>

Если я укажу разрешение внутри тега получателя, моя деятельность не начнется. следующий

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcaststaticdemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.broadcaststaticdemo.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name="com.example.broadcaststaticdemo.StartAppOnBoot"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
    <category android:name="android.intent.category.HOME" />
</intent-filter>

While i have used the second approach (permission inside receiver tag) in my other application it is working completely fine. So i am confused what is difference between specifying permission at application level and receiver level. I have seen android documentation where they have mentioned

Имя разрешения, которое должны иметь вещатели для отправки сообщения приемнику вещания. Если этот атрибут не установлен, разрешение, установленное атрибутом разрешения элемента, применяется к широковещательному приемнику. Если ни один из атрибутов не установлен, получатель не защищен разрешением. что означает, что мы можем указать любое место. Любая помощь будет оценена


person CodingRat    schedule 23.07.2013    source источник
comment
Я думаю, вы путаете разрешение на получение трансляции о завершении загрузки и разрешение, которое вы требуете от других, чтобы позволить им отправлять вам трансляции. Это два разных, довольно несвязанных варианта использования разрешений.   -  person Daniel S.    schedule 23.07.2013
comment
@Daniel может, пожалуйста, объяснить немного больше, что вы подразумеваете под разрешением на получение трансляции о завершении загрузки и разрешением, которое вы навязываете другим, чтобы позволить им отправлять вам трансляцию.   -  person CodingRat    schedule 23.07.2013


Ответы (1)


Когда вы используете <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />, это дает вашему приложению возможность общаться с интерфейсами, для которых требуется разрешение RECEIVE_BOOT_COMPLETE.

Но когда вы назначаете атрибут android:permission в <receiver>, вы заявляете, что все, что взаимодействует с вашим широковещательным приемником, требует разрешения RECEIVE_BOOT_COMPLETE. Подробнее об этом можно узнать здесь http://developer.android.com/guide/topics/manifest/receiver-element.html#prmsn.

person frogmanx    schedule 23.07.2013