2015-09-14 2 views
0

У меня есть широковещательный приемник, который работает, когда я настраиваю его динамически, но не работает, когда объявлен в файле манифеста.Android-приемник работает динамически, но не через файл манифеста

Я искал для этого google, и все примеры соответствуют тому, что я делаю в своем коде. У меня есть активность в моем файле манифеста, так что это не проблема. Я пробовал полностью указать имя класса получателя, а также использовать .MyBroadcastReceiver, но это не имело никакого значения.

Может кто-нибудь помочь?

Вот мой файл манифеста

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

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".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.mikrodyne.receiverdemo.MyBroadcastReceiver" 
      android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.intent.action.HEADSET_PLUG" /> 
      </intent-filter> 
     </receiver> 

    </application> 

</manifest> 

А вот мой класс приемник

public class MyBroadcastReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     String action = intent.getAction(); 
     Log.d("Receiver", "Received action: " + action); 
    } 
} 

ТИА Ниша Миллер

ответ

2

Согласно documentation for HEADSET_PLUG:

Вы не может получить это через компоненту, объявленную в манифестах, только явно зарегистрировавшись на него с Context.registerReceiver().

Так что вы пытаетесь сделать это невозможно.

+0

Спасибо! Я пропустил эту часть документации :-( –

0

Если вы хотите получить события из-за пределов, вам необходимо установить android:exported="true"

Примечание: вы c не получайте этого намерения.

это в вашем AndroidManifest.xml

<receiver 
     android:name="com.mikrodyne.receiverdemo.MyBroadcastReceiver" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.HEADSET_PLUG" /> 
     </intent-filter> 
    </receiver> 
Смежные вопросы