CALL_STATE_IDLE多次调用?

时间:2014-09-01 18:30:27

标签: android javamail telephonymanager

我创建了一个记录所有来电和去电的通话记录应用程序。应用程序运行完美我已经测试过了。我需要为录制的文件发送背景电子邮件(没有使用JAVAMAIL的用户发明)。我有工作代码用于发送带附件的邮件。我创建了收听PHONE_STATENEW_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");
}

0 个答案:

没有答案