2012-11-28 15 views
5

Sto cercando di intercettare una chiamata in entrata ma non funziona.Ricevitore di trasmissione chiamate in entrata non funzionante (Android 4.1)

Questo è il mio manifesto:

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

<uses-sdk android:minSdkVersion="9" /> 

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 

<uses-feature 
    android:name="android.hardware.camera" 
    android:required="false" /> 
<uses-feature 
    android:name="android.hardware.camera.front" 
    android:required="false" /> 

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" > 
    <receiver android:name=".PhoneStateBroadcastReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
    </receiver> 
</application> 

Questo è il mio ricevitore trasmissione

package com.test.bgPicture; 

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

public class PhoneStateBroadcastReceiver extends BroadcastReceiver{ 

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

     TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     telephonyManager.listen(new CustomPhoneStateListener(context), PhoneStateListener.LISTEN_CALL_STATE); 
    } 
} 

E chi ascolta ..

package com.test.bgPicture; 

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

public class CustomPhoneStateListener extends PhoneStateListener { 

//private static final String TAG = "PhoneStateChanged"; 
Context context; //Context to make Toast if required 
public CustomPhoneStateListener(Context context) { 
    super(); 
    this.context = context; 
} 

@Override 
public void onCallStateChanged(int state, String incomingNumber) { 
    super.onCallStateChanged(state, incomingNumber); 

    switch (state) { 
    case TelephonyManager.CALL_STATE_IDLE: 
     //when Idle i.e no call 
     Toast.makeText(context, "Phone state Idle", Toast.LENGTH_LONG).show(); 
     break; 
    case TelephonyManager.CALL_STATE_OFFHOOK: 
     //when Off hook i.e in call 
     //Make intent and start your service here 
     Toast.makeText(context, "Phone state Off hook", Toast.LENGTH_LONG).show(); 
     break; 
    case TelephonyManager.CALL_STATE_RINGING: 
     //when Ringing 
     Toast.makeText(context, "Phone state Ringing", Toast.LENGTH_LONG).show(); 
     break; 
    default: 
     break; 
    } 
} 
} 

Ma i brindisi non sono visualizzato, a idea di ny?

EDIT: Ho appena provato con un altro telefono con Android 2.3.6 e ha funzionato lì, ma sul primo dispositivo (Android 4.1) non ha funzionato. Perché potrebbe essere?

+0

cercare di 'Log.v ("onCallStateChanged", "Stato Telefono Idle");' e verificare logcat perché magari possibile contesto che si sta utilizzando per la visualizzazione di Toast non è disponibile –

+0

quello non ha aiutato .. ho fatto notare che funziona su Android 2.3.6 ma non su Android 4.1, qualche idea? –

risposta

10

Ho trovato il problema, è necessario avviare manualmente un'attività dall'applicazione prima che il ricevitore di trasmissione inizi a funzionare da Android 3.0.

+0

accetta la tua risposta ... !!! –

+0

Devo aspettare fino a domani prima di poterlo accettare .. –

+0

Ho letto da qualche parte nei blog che questa è una funzionalità di sicurezza, in modo che l'applicazione che l'utente non ha mai attivato avviando un'attività non ottenga le trasmissioni. –

-1

Hai provato ad aggiungere un ricevitore di trasmissione all'interno di un servizio? Un servizio è pensato per rimanere attivo anche quando l'applicazione è chiusa/ridotta. Check this link

Problemi correlati