1

У меня возникла странная проблема. Я не могу поймать входящие звонки с помощью широковещательного приемника. Я дважды и тройной проверил мой файл манифеста для необходимых разрешений. Все кажется хорошо, но не знаю почему, приемник не работает. Может ли кто-нибудь предложить причину этого? Любая помощь будет оценена! Вот мой скелет код:Входящий вызов широковещательного приемника не работает

Главная:

package com.calllistener; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

public class MainActivity extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     MyPhoneStateListener phoneListener=new MyPhoneStateListener(context); 
     TelephonyManager telephony = (TelephonyManager) 
     context.getSystemService(Context.TELEPHONY_SERVICE); 
     telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);  
    } 
} 

MyPhoneStateListener Класс:

package com.calllistener; 

import android.content.Context; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
import android.widget.Toast; 

public class MyPhoneStateListener extends PhoneStateListener { 
    Context ctx; 
    public MyPhoneStateListener (Context ctx) { 
     super(); 
     this.ctx=ctx; 
    } 
    public void onCallStateChanged(int state, String incomingNumber) { 
     switch (state) { 
     case TelephonyManager.CALL_STATE_IDLE: 
      Log.d("DEBUG", "IDLE"); 
      break; 
     case TelephonyManager.CALL_STATE_OFFHOOK: 
      Log.d("DEBUG", "OFFHOOK"); 
      break; 
     case TelephonyManager.CALL_STATE_RINGING: 
      Toast.makeText(ctx, "Ringing", Toast.LENGTH_LONG).show(); 
      Log.d("DEBUG", "RINGING"); 
      break; 
     } 
    } 
} 

Manifest:

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

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="17" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="Call listener" > 
     <receiver android:name="MainActivity" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 
+0

спросил много раз здесь ... хотя бы одно действие должно быть запущено сначала ... – Selvin

+0

Я видел большинство решений, и ни один из них не работает в моем случае. Кстати, почему вы говорите, что деятельность необходима для запуска кода? Приемник не пробудится во время входящего вызова? –

+0

http://developer.android.com/about/versions/android-3.1.html#launchcontrols – Selvin

ответ

1

Использование должны использовать registerReceiver(Receiver, Filter); в своей деятельности, как сказал Selvin в запустите свой BroadCastReceiver, и это все, что нужно Это.

+0

Или в манифесте добавьте андроид: enabled = "true" к получателю – Leebeedev

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