2016-04-24 5 views
0

Wenn ich diese" android: exportierte = "true" "oder deaktivieren Sie FALSE, dann broadcast Empfänger funktioniert nicht.: -/ Wie Sie das lösen Fehler, während ich auf den Empfang von SMS, eine Aktion auszuführen versuchen !!Warum die BROADCAST-Empfängerregistrierung einen Fehler verursacht. Meine App stürzt gerade wegen dieser "android: exportierte =" 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> 

Antwort

0

Sie unbedingt android:exported="true" halten müssen, weil dieser Empfänger Ihre Sendung ermöglicht ausgelöst Ereignisse zu hören außerhalb Ihre Anwendung.

Android: exportiert Whe Daher kann der Broadcast-Empfänger Nachrichten von Quellen außerhalb seiner Anwendung empfangen - "wahr", wenn dies möglich ist, und "falsch", wenn dies nicht der Fall ist. Wenn "false" ist, sind die einzigen Nachrichten, die der Broadcast-Empfänger empfangen kann, diejenigen, die von Komponenten derselben Anwendung oder von Anwendungen mit derselben Benutzer-ID gesendet werden. Der Standardwert hängt davon ab, ob der Broadcast-Empfänger Intent-Filter enthält. Das Fehlen von Filtern bedeutet, dass es nur von Intent-Objekten aufgerufen werden kann, die seinen genauen Klassennamen angeben. Dies bedeutet, dass der Empfänger nur für den anwendungsinternen Gebrauch bestimmt ist (da andere den Klassennamen normalerweise nicht kennen würden). In diesem Fall ist der Standardwert "false". Auf der anderen Seite impliziert das Vorhandensein von mindestens einem Filter, dass der Rundfunkempfänger beabsichtigte Intent-Übertragungen durch das System oder andere Anwendungen empfangen soll, so dass der Standardwert "wahr" ist.

Dieses Attribut ist nicht die einzige Möglichkeit, die externe Belichtung eines Broadcast-Empfängers zu begrenzen. Sie können auch eine Berechtigung verwenden, um die externen Entitäten einzuschränken, die Nachrichten senden können (siehe Berechtigungsattribut).

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

Sie Absturz müssen Sie den Code in Beziehung gesetzt werden, die Daten von Ihrem BroadcastReceiver empfangen Verarbeitung und nicht verursacht durch die BroadcastReceiver selbst.

+0

Danke @Clark. Problem gelöst. :-) –