dalmif
شنبه 05 اردیبهشت 1394, 14:25 عصر
سلام دوستان من از کد زیر برای اطلاع یافتتن از تماس استفاده می کنم.
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.inputmethod.InputMethodSession.EventC allback;
import android.widget.Toast;
public class CallBroadcastReceiver extends BroadcastReceiver {
Context contxt;
TelephonyManager telephony;
private boolean ring = false;
private boolean callReceived = false;
static String callerPhoneNumber = "";
public String msg="";
// SharedPreferences preferenceClass;
@Override
public void onReceive(final Context context, Intent intent) { // Get the
// current
// Phone State
contxt = context;
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE );
telephony = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(new PhoneStateListener(),
PhoneStateListener.LISTEN_CALL_STATE);
Bundle bundle = intent.getExtras();
callerPhoneNumber = bundle.getString("incoming_number");
if (state == null) {
callerPhoneNumber = intent
.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.i("CallFinishingBroadcastReceiver out going "
, callerPhoneNumber);
return;
}
// If phone state "Rininging"
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING )) {
ring = true;
Toast.makeText(context, "ringing", Toast.LENGTH_LONG).show();
Log.i("CallFinishingBroadcastReceiver ringing "
, callerPhoneNumber);
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// If incoming call is received
if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK )) {
Toast.makeText(context, "answer", Toast.LENGTH_LONG).show();
callReceived = true;
Log.i("offhook " , callerPhoneNumber);
}
// If phone is Idle
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
// If phone was ringing(ring=true) and not
// received(callReceived=false) , then it is a missed call
System.out.println("MISSED " + callerPhoneNumber);
if (ring == true && callReceived == false) {
Log.i("CallFinishingBroadcastReceiver idle "
, callerPhoneNumber);
} else if (ring == true && callReceived == true) {
Log.i("CallFinishingBroadcastReceiver INCOMING "
, callerPhoneNumber);
}
ring = false;
callReceived = false;
}
}
}
اما فقط اون قسمت Ringing کار میکنه یعنی تا تماس برقرار میشه لاگ کت نرم افزار فقط اون قسمت ringing رو نشون میده که Value هم شماره فرد تماس گیرنده هست. اما می خوام وقتی قطع شد یا وصل شد یه کاری انجام بدم که نمیشه با این کد کار کرد.
اگه لینکی دارید ممنون میشم کمک کنید
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.inputmethod.InputMethodSession.EventC allback;
import android.widget.Toast;
public class CallBroadcastReceiver extends BroadcastReceiver {
Context contxt;
TelephonyManager telephony;
private boolean ring = false;
private boolean callReceived = false;
static String callerPhoneNumber = "";
public String msg="";
// SharedPreferences preferenceClass;
@Override
public void onReceive(final Context context, Intent intent) { // Get the
// current
// Phone State
contxt = context;
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE );
telephony = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(new PhoneStateListener(),
PhoneStateListener.LISTEN_CALL_STATE);
Bundle bundle = intent.getExtras();
callerPhoneNumber = bundle.getString("incoming_number");
if (state == null) {
callerPhoneNumber = intent
.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.i("CallFinishingBroadcastReceiver out going "
, callerPhoneNumber);
return;
}
// If phone state "Rininging"
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING )) {
ring = true;
Toast.makeText(context, "ringing", Toast.LENGTH_LONG).show();
Log.i("CallFinishingBroadcastReceiver ringing "
, callerPhoneNumber);
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// If incoming call is received
if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK )) {
Toast.makeText(context, "answer", Toast.LENGTH_LONG).show();
callReceived = true;
Log.i("offhook " , callerPhoneNumber);
}
// If phone is Idle
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
// If phone was ringing(ring=true) and not
// received(callReceived=false) , then it is a missed call
System.out.println("MISSED " + callerPhoneNumber);
if (ring == true && callReceived == false) {
Log.i("CallFinishingBroadcastReceiver idle "
, callerPhoneNumber);
} else if (ring == true && callReceived == true) {
Log.i("CallFinishingBroadcastReceiver INCOMING "
, callerPhoneNumber);
}
ring = false;
callReceived = false;
}
}
}
اما فقط اون قسمت Ringing کار میکنه یعنی تا تماس برقرار میشه لاگ کت نرم افزار فقط اون قسمت ringing رو نشون میده که Value هم شماره فرد تماس گیرنده هست. اما می خوام وقتی قطع شد یا وصل شد یه کاری انجام بدم که نمیشه با این کد کار کرد.
اگه لینکی دارید ممنون میشم کمک کنید