⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makecall.java

📁 Android从入门到精通
💻 JAVA
字号:
package com.androidbook.telephony;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.PhoneNumberFormattingTextWatcher;
import android.telephony.gsm.SmsManager;
import android.telephony.gsm.SmsMessage;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MakeCall extends Activity {
    BroadcastReceiver rcvMsgSent = null;
    BroadcastReceiver rcvMsgReceipt = null;
    
    BroadcastReceiver rcvIncoming = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        final EditText messageEntry = (EditText) findViewById(R.id.short_message);

        final SmsManager sms = SmsManager.getDefault();
        
        // format the number
        final EditText numberEntry = (EditText) findViewById(R.id.number_entry);
        numberEntry.addTextChangedListener(new PhoneNumberFormattingTextWatcher());

        // prepare listening intents
        Intent msgSent = new Intent("ACTION_MSG_SENT");
        Intent msgReceipt = new Intent("ACTION_MSG_RECEIPT");

        final PendingIntent pendingMsgSent = PendingIntent.getBroadcast(this, 0, msgSent, 0);
        final PendingIntent pendingMsgReceipt = PendingIntent.getBroadcast(this, 0, msgReceipt, 0);

        // handle the send message button
        Button sendSMS = (Button) findViewById(R.id.send_sms);
        sendSMS.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                String destination = numberEntry.getText().toString();
                String message = messageEntry.getText().toString();
                sms.sendTextMessage(destination, null, message, pendingMsgSent, pendingMsgReceipt);
                
                
                if (rcvMsgSent != null) {
                    unregisterReceiver(rcvMsgSent);
                    rcvMsgSent = null;
                }

                // listen for status notifications
                rcvMsgSent = new BroadcastReceiver() {

                    @Override
                    public void onReceive(Context context, Intent intent) {
                        int result = getResultCode();
                        if (result != Activity.RESULT_OK) {
                            Log.e("telephony", "SMS send failed code = " + result);
                            pendingMsgReceipt.cancel();
                        } else {
                            Log.i("telephony", "SMS message sent!");
                            messageEntry.setText("");
                        }

                    }
                };
                registerReceiver(rcvMsgSent, new IntentFilter("ACTION_MSG_SENT"));

                
                /*
                // This block doesn't work right -- it doesn't register, ends up leaking the IntentFilter, and causes lots of log grief
                if (rcvMsgReceipt != null) {
                    unregisterReceiver(rcvMsgSent);
                    rcvMsgReceipt = null;
                }
                rcvMsgReceipt = new BroadcastReceiver() {

                    @Override
                    public void onReceive(Context context, Intent intent) {
                        Log.e("telephony", "SMS received receipt received.");
                    }
                };
                Intent test = registerReceiver(rcvMsgReceipt, new IntentFilter("ACTION_MSG_RECEIPT"));
                if (test!= null) {
                    Log.i("telephony", "test is not null!!");
                    
                } else {
                    Log.i("telephony", "oh snap! test is null!?");
                }
                */
                


            }

        });
        
        
        final TextView receivedMessage = (TextView)findViewById(R.id.received_message);
        rcvIncoming = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                Log.i("telephony", "SMS received");
                Bundle data = intent.getExtras();
                if (data != null) {
                    // SMS uses a data format known as a PDU
                    Object pdus[] = (Object[]) data.get("pdus");
                    String message = "New message:\n";
                    String sender = null;
                    for (Object pdu : pdus) {
                        SmsMessage part = SmsMessage.createFromPdu((byte[])pdu);
                        message += part.getDisplayMessageBody();
                        if (sender == null) {
                            sender = part.getDisplayOriginatingAddress();
                        }
                    }
                    receivedMessage.setText(message+"\nFrom: "+sender);
                    numberEntry.setText(sender);
                }
            }
        };
        registerReceiver(rcvIncoming, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
        
        
        Button call = (Button) findViewById(R.id.call_button);
        call.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                Uri number = Uri.parse("tel:" + numberEntry.getText().toString());
                Intent dial = new Intent(Intent.ACTION_DIAL, number);
                startActivity(dial);
            }
            
        });
        
    }

    @Override
    protected void onPause() {
        try {
            if (rcvMsgSent != null) {
                unregisterReceiver(rcvMsgSent);
                rcvMsgSent = null;
            }
        } catch (Exception e) {
            Log.e("telephony", "Failed to unregister rcvMsgSent", e);
        }
        try {
            if (rcvMsgReceipt != null) {
                unregisterReceiver(rcvMsgSent);
                rcvMsgReceipt = null;
            }
        } catch (Exception e) {
            Log.e("telephony", "Failed to unregister rcvMsgReceipt", e);

        }

        try {
            if (rcvIncoming != null) {
                unregisterReceiver(rcvIncoming);
                rcvIncoming = null;
            }
        } catch (Exception e) {
            Log.e("telephony", "Failed to unregister rcvIncoming", e);
        }
        super.onStop();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -