2013-04-27 4 views
2

Я использую BroadcastReceiver для действий, связанных с событиями sd-карты, такими как mount/unmount.Как узнать, зарегистрирован ли мой Android BroadcastReceiver

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

http://developer.android.com/reference/android/content/BroadcastReceiver.html

Я не смог найти способ, как это. Итак, как я могу узнать, зарегистрирован ли мой андроид BroadcastReceiver или нет. Какой метод я должен использовать для получения информации о том, зарегистрирован ли мой андроид BroadcastReceiver или нет. Есть ли какой-либо другой способ, которым я могу получить приемник infothat mu, зарегистрирован и в палатках не работает.

Вот мой AndroidManifest.xml

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

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <receiver 
      android:name="SDCardStateChangeListener" 
      android:enabled="true" 
      android:exported="false" > 
      <intent-filter> 
       <action android:name="android.intent.action.MEDIA_UNMOUNTED" /> 
       <action android:name="android.intent.action.MEDIA_REMOVED" /> 
       <action android:name="android.intent.action.MEDIA_EJECT" /> 
       <action android:name="android.intent.action.MEDIA_BAD_REMOVAL" /> 

       <data android:scheme="file" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

и мой SDCardStateChangeListener.java, который проходит BroadcastReceiver

package com.example.broadcastreceiversdcardinsertionremoval; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class SDCardStateChangeListener extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (action.equalsIgnoreCase(Intent.ACTION_MEDIA_REMOVED) 
       || action.equalsIgnoreCase(Intent.ACTION_MEDIA_UNMOUNTED) 
       || action.equalsIgnoreCase(Intent.ACTION_MEDIA_BAD_REMOVAL) 
       || action.equalsIgnoreCase(Intent.ACTION_MEDIA_EJECT)) { 

      Log.d("action", "Sd Card Event"); 

     } 
    } 

} 

ответ

2

В этом случае вы явно не регистрации приемник, вы Объявление оно в манифесте, нет необходимости в регистрации снова. Все компоненты, чей манифест имеет соответствующий фильтр-приемник, будут вызываться (служба пакета отслеживает этот материал). В этом случае будет создан экземпляр объекта класса SDCardStateChangeListener и будет вызываться его метод onReceive().

Вы можете просто поставить точку останова или сообщение журнала как первый оператор внутри метода onRecieve(), чтобы узнать, вызвано ли оно или нет.

+0

Сэр означает, что вы пытаетесь сказать, что если я хочу, чтобы мой BroadcastReceiver был динамическим, мы только зарегистрируем его. –

+0

@Nikhil, вы выходите на регистрацию, вызывая метод 'registerReceiver()' вашего 'Context', вы можете отменить регистрацию с помощью метода unregisterReceiver()' context. С другой стороны, приемники, объявленные в манифесте, по умолчанию помещаются в системный реестр при установке приложения, они не могут быть незарегистрированы в пути. –

+0

Итак, сэр это правда, что они по умолчанию зарегистрированы, когда объявлены в манифесте. –

2

Если у вас есть android:exported="false", вы никогда не получите трансляции, отправленные из-за пределов собственного приложения.

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