2012-11-28 19 views
5

Gelen bir çağrı yayını yakalamaya çalışıyorum ama çalışmıyor. Gelen çağrı yayın alıcısı çalışmıyor (Android 4.1)

Bu

benim açıktır: Tüm Bu benim yayın alıcısı

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

Ve dinleyici

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

olduğunu ..

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

Ama tost değildir görüntülenen, bir ny fikri mi?

DÜZENLEME: Ben sadece Android 2.3.6 ile başka bir telefon ile denedim ve orada çalıştı, ancak ilk cihazda (android 4.1) işe yaramadı. Bu neden olabilir?

+0

Log.v ("onCallStateChanged", "Telefon devlet Boşta") 'için deneyin;' ve Tost gösteren kullandığınız belki mümkün bağlam yardım etmedi Yani –

+0

kullanılamadığı için logcat kontrol .. ben yaptım Android 2.3.6 üzerinde çalışır, ancak android 4.1, herhangi bir fikir değil dikkat edin? –

cevap

10

Sorunu buldum, yayın alıcıları android 3.0 olarak çalışmaya başlamadan önce uygulamanızdan bir etkinliği elle başlatmanız gerekir.

+0

cevabınızı kabul edin ... !!! –

+0

Bunu kabul etmeden önce yarın beklemek zorundayım .. –

+0

Bloglarda bir yer bu güvenlik özelliği olduğunu okudum, bu yüzden kullanıcının bir etkinliği başlatarak hiçbir zaman etkinleşemediği uygulamaları yayınları almayın. –

-1

Bir servisin içine bir yayın alıcısı eklemeyi denediniz mi? Bir uygulama, uygulama kapatıldığında/en aza indirildiğinde bile aktif kalmak demektir. Check this link

İlgili konular