2016-04-24 2 views
0

Если я удалю этот« android: exported = «true» »или сделаю его ЛОЖНЫМ, то приемник BroadCast не работает.: -/ Как решить эту проблему ошибка, в то время как я пытаюсь выполнить некоторые действия при получении SMS !!Почему регистрация приемника BROADCAST вызывает ошибку. Мое приложение просто сбой из-за этого «android: exported =» true »

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.pucit.arsh_hp.multisms"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name"  
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 


     </activity> 

     <receiver android:name=".SmsReceiver" android:exported="true"> 
      <intent-filter android:priority="999"> 
       <action  android:name="android.provider.Telephony.SMS_RECEIVED" android:enabled="true" /> 
      </intent-filter> 
     </receiver> 

    </application> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
    <uses-permission android:name="android.permission.SEND_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.READ_CALL_LOG"/> 

</manifest> 

ответ

0

Вы абсолютно должны держать android:exported="true", потому что это позволяет ваш вещательный приемник для прослушивания событий вызвало вне вашего приложения.

android: экспорт Whe или радиовещательный приемник может получать сообщения от источников вне своего приложения - «true», если это возможно, и «false», если нет. Если «false», единственными сообщениями, которые может принимать широковещательный приемник, являются те, которые отправляются компонентами одного и того же приложения или приложений с одинаковым идентификатором пользователя. Значение по умолчанию зависит от того, содержит ли широковещательный приемник фильтры намерений. Отсутствие каких-либо фильтров означает, что он может быть вызван только объектами Intent, которые определяют его точное имя класса. Это означает, что приемник предназначен только для внутреннего использования приложения (так как другие обычно не знают имя класса). Поэтому в этом случае значением по умолчанию является «false». С другой стороны, наличие по меньшей мере одного фильтра подразумевает, что широковещательный приемник предназначен для приема сигналов, транслируемых системой или другими приложениями, поэтому значение по умолчанию является «истинным».

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

http://developer.android.com/guide/topics/manifest/receiver-element.html#exported

Вы аварии должны быть связаны с вашим кодом обработки данных, полученных с помощью вашей BroadcastReceiver, а не вызваны самой BroadcastReceiver.

+0

Thank you @Clark. Проблема решена. :-) –

Смежные вопросы