2012-11-28 13 views
5

incommingコール・ブロードキャストをキャッチしようとしていますが、機能していません。 着信中のブロードキャスト・レシーバーが機能しない(Android 4.1)

この

は私のマニフェストです:これは私の放送受信機

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

とリスナーが

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

..です

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

しかし、乾杯はありません表示され、いい考えは?

EDIT:アンドロイド2.3.6で別の電話機で試してみましたが、そこでは動作しましたが、最初のデバイス(アンドロイド4.1)では動作しませんでした。なぜこれができますか?

+0

Log.v(「onCallStateChanged」、「電話状態アイドル」) 'してみてください;'、あなたはトーストを示すために使用されているかもしれない可能性コンテキストが助けなかったこと –

+0

使用できないため、logcatをチェック..私はやりましたそれはアンドロイド2.3.6では動作しますが、アンドロイド4.1では動作しないことに注意してください。 –

答えて

10

ブロードキャストレシーバがAndroid 3.0以降で動作する前に、アプリケーションから手動でアクティビティを開始する必要があるという問題がありました。

+0

あなたの答えを受け入れる... !!! –

+0

私はそれを受け入れる前に明日に待たなければなりません.. –

+0

ブログのどこかでこれがセキュリティ機能だと読んだので、アクティビティを開始しても決して起動しなかったアプリケーションはブロードキャストを取得しません。 –

-1

ブロードキャスト受信機をサービス内に追加しようとしましたか?サービスは、アプリケーションが閉じられた/最小化されている場合でもアクティブな状態を保つためのものです。 Check this link

関連する問題