2012-11-28 21 views
5

Ich versuche, einen eingehenden Anruf Broadcast zu fangen, aber es funktioniert nicht.Eingehender Anruf Broadcast-Empfänger funktioniert nicht (Android 4.1)

Das ist mein Manifest:

<?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> 

Das ist mein Rundfunkempfänger

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); 
    } 
} 

Und der Zuhörer ..

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; 
    } 
} 
} 

Aber die Toasts sind nicht angezeigt, a ny Idee ist?

EDIT: Ich habe es gerade mit einem anderen Handy mit Android 2.3.6 versucht und es funktionierte dort, aber auf dem ersten Gerät (Android 4.1) hat es nicht funktioniert. Warum könnte das sein?

+0

versuchen 'Log.v („onCallStateChanged“,„Telefon Zustand Idle“);' und logcat zu überprüfen, denn vielleicht möglich Kontext Dank für Ihren Toast verwendet nicht verfügbar ist –

+0

, die nicht .. half ich habe Beachten Sie, dass es auf Android 2.3.6 funktioniert, aber nicht auf Android 4.1, keine Ahnung? –

Antwort

10

Ich habe das Problem gefunden, Sie müssen manuell eine Aktivität aus Ihrer Anwendung starten, bevor die Broadcast-Empfänger ab Android 3.0 zu arbeiten beginnt.

+0

akzeptiere deine Antwort ... !!! –

+0

Ich muss auf morgen warten, bevor ich es akzeptieren kann. –

+0

Ich habe irgendwo auf den Blogs gelesen, dass dies ein Sicherheitsmerkmal ist, so dass die Anwendung, die der Benutzer nie durch das Starten einer Aktivität aktiviert hat, die Broadcasts nicht bekommt. –

-1

Haben Sie versucht, einen Broadcast-Empfänger in einem Dienst hinzuzufügen? Ein Dienst soll auch dann aktiv bleiben, wenn die Anwendung geschlossen/minimiert wird. Check this link

Verwandte Themen