1

Я создаю приложение, которое запускает услугу каждый раз, когда выполняется вызов, когда я впервые создаю вызов, широковещательный приемник запускает услугу, и все хорошо.BroadCast Receiver слишком много экземпляров OutgoingCallBroadcaster; экземпляры = 2; limit = 1

Но тогда проблема: После того, как я снова запустить номеронабиратель я получаю следующее сообщение об ошибке в LogCat:

10-30 10:10:38.674: E/StrictMode(171): class com.android.phone.OutgoingCallBroadcaster; instances=2; limit=1 

Я попытался решить эту проблему, вызвав эту команду в конце OnReceive:

this.abortBroadcast(); 

Это устраняет эту ошибку, но также останавливает запуск службы, может ли кто-нибудь помочь мне исправить эту проблему, или есть ли кто-нибудь, кто испытал это неудобство?

Это приемник:

public class OutgoingCallReceiver extends BroadcastReceiver { 
    public OutgoingCallReceiver() { 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 


     // Extract phone number reformatted by previous receivers 
     String phoneNumber = getResultData(); 
     if (phoneNumber == null) { 
      // No reformatted number, use the original 
      phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
     } 
     Intent in = new Intent(context, OutgoingCallHandler.class); 

     context.startService(in); 
     OutgoingCallHandler.phonenumber = phoneNumber; 


    } 
} 

А вот заявления в манифесте:

<service 
    android:name=".IncomingCallHandler" 
    android:label="@string/title_activity_main" > 
</service> 

<receiver android:name=".OutgoingCallReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

Все помощь очень Welcom!

ответ

1
  • Не называйте abortBroadcast(), как NEW_OUTGOING_CALL broadcast является Ordered Broadcast. Он имеет final broadcast receiver с некоторой последующей обработкой и очисткой.

  • Ваш context.startService(in); не будет запускать другой экземпляр вашей службы, если OutgoingCallHandler все еще жив. Добавьте log message to your onStartCommand для проверки. И, Смотрите, если вы можете избежать ссылок экономии на OutgoingCallHandler.phonenumber = phoneNumber; от вашего onReceive

+0

Я решил эту проблему, остановив службу после того, как это было сделано, –

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