我创建了一个记录所有来电和去电的通话记录应用程序。应用程序运行完美我已经测试过了。我需要为录制的文件发送背景电子邮件(没有使用JAVAMAIL
的用户发明)。我有工作代码用于发送带附件的邮件。我创建了收听PHONE_STATE
和NEW_OUTGOING_CALL
的广播接收器。广播接收器启动/停止根据电话状态更改记录服务。我的问题是如何整合我的电子邮件发送代码与应用程序。我知道我必须在CALL_STATE_IDLE
中调用邮件发送方法。但由于该方法多次调用,我无法这样做。
我感到困惑的是CALL_STATE_IDLE
是在后台发送电子邮件的正确位置,因为它多次出现。
对于来电电话状态是
CALL_STATE_RINGING
CALL_STATE_OFFHOOK
CALL_STATE_IDLE
对于拨出电话状态是
CALL_STATE_IDLE
CALL_STATE_OFFHOOK
CALL_STATE_IDLE
任何帮助PLZ .. 提前谢谢
CallBroadcastReceiver.java
public class CallBroadcastReceiver extends BroadcastReceiver {
public static boolean IsOutgoingCall = false;
public static String callNumber = "";
public void onReceive(Context context, Intent intent) {
Log.d("CallRecorder", "CallBroadcastReceiver::onReceive got Intent: "
+ intent.toString());
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
String numberToCall = intent
.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.d("CallRecorder",
"CallBroadcastReceiver intent has EXTRA_PHONE_NUMBER: "
+ numberToCall);
IsOutgoingCall = true;
callNumber = numberToCall;
}
PhoneListener phoneListener = new PhoneListener(context, intent);
TelephonyManager telephony = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
Log.d("PhoneStateReceiver::onReceive", "set PhoneStateListener");
}
}
PhoneListener
public class PhoneListener extends PhoneStateListener {
public static Context context;
private Intent intent;
public PhoneListener(Context c, Intent i) {
Log.i("CallRecorder", "PhoneListener constructor");
context = c;
intent = i;
}
public void onCallStateChanged(int state, String incomingNumber) {
Log.d("CallRecorder", "PhoneListener::onCallStateChanged state:"
+ state + " incomingNumber:" + incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Log.d("CallRecorder", "CALL_STATE_IDLE, stoping recording");
Boolean stopped = context.stopService(new Intent(context,
RecordService.class));
Log.i("CallRecorder", "stopService for RecordService returned "
+ stopped);
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.d("CallRecorder", "CALL_STATE_RINGING");
Log.d("CallRecorder",
"CallBroadcastReceiver intent has EXTRA_PHONE_NUMBER: "
+ incomingNumber);
CallBroadcastReceiver.IsOutgoingCall = false;
CallBroadcastReceiver.callNumber = incomingNumber;
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d("CallRecorder", "CALL_STATE_OFFHOOK starting recording");
Intent callIntent = new Intent(context, RecordService.class);
ComponentName name = context.startService(callIntent);
if (null == name) {
Log.e("CallRecorder",
"startService for RecordService returned null ComponentName");
} else {
Log.i("CallRecorder",
"startService returned " + name.flattenToString());
}
break;
}
}
}
sendEmailWithAttachment()
File attachedFile = new File("/mnt/sdcard/Recording/123456789.mp4");
if(attachedFile.exists() && attachedFile.canRead()) {
Log.v("SendMail", "File Exists");
GMailSender sender = new GMailSender("your@gmail.com","your@gmail.com"); //<<< Enter Here
sender.sendMail("Subject", "Body ",
"your@gmail.com", "to@gmail.com", attachedFile);
emailsStatus = 1; // Send
} else {
emailsStatus = 2; // File Not Exists
Log.v("SendMail", "File Not Exists");
}