1

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

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

<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> 

В то время как я использовал второй подход (разрешение внутри приемника тега) в моем другом приложении он работает совершенно нормально. Поэтому я смущен, что разница между указанием разрешения на уровне приложения и уровня приемника. Я видел документацию по андроиду, где они упоминали

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

+1

Я думаю, что вы сбиваете с толку разрешение на получение загруженной завершенной трансляции и разрешение, которое вам требуются другим, чтобы разрешить им отправлять вам трансляции. Это два разных, довольно несвязанных варианта использования разрешений. –

+0

@ Даниэль может объяснить немного больше, что вы подразумеваете под разрешением на получение загруженной завершенной трансляции и разрешения, которое вы выполняете на других, чтобы разрешить им отправлять вам трансляции. – CodingRat

ответ

2

При использовании <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.