para a Activity e uma para o Receiver.CalculoReceiver.java package br.com.livro.cap9; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; public class CalculoReceiver extends BroadcastReceiver { @Override public void onReceive(Context ctx, Intent intent) { // recupera os dados para calculo que qualquer Intent // recebida para este fim precisa enviar Bundle extras = intent.getExtras(); if (extras != null) { String n1 = extras.getString("numero1"); String n2 = extras.getString("numero2"); String op = extras.getString("operacao"); // recebe os valores // faz uma pequena validacao // e entao decide qual operacao executar guardando o valor em resultado if (!isEmpty(n1) && !isEmpty(n2) && !isEmpty(op)) { int in1 = Integer.parseInt(n1); int in2 = Integer.parseInt(n2); int iop = Integer.parseInt(op); int resultado = 0; switch (iop) { case 0: // soma resultado = in1 + in2; break; case 1: // subtracao resultado = in1 - in2; break; case 2: // multiplicacao resultado = in1 * in2; break; case 3: // divisao resultado = in1 / in2; break; } // apos efetuar o calculo apenas gera um log // que podera ser verificado pelo LogCat no eclipse. Log.i("CALCULO", "resultado do calculo: " + resultado); } } } private boolean isEmpty(String v) { return (v == null || v.length() == 0); } }CalculadoraActivity.java package br.com.livro.cap9; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.Toast; public class CalculadoraActivity extends Activity implements OnItemSelectedListener, OnClickListener { protected static final int SOMA = 0; private int codigoOperacao = SOMA; // lista de operacoes disponiveis private String[] operacoes = { "Soma", "Subtracao", "Multiplicacao", "Divisao" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // adicionando o comportamento para o botao calcular Button btCalcular = (Button) findViewById(R.id.btCalcular); btCalcular.setOnClickListener(this); } /** * Ao selecionar um item no Spinner (famoso combobox em outras plataformas), * a posicao da operacao selecionada e guardada em codigoOperacao que podera ser * encaminhada atraves da Intent posteriormente quando o usuario solicitar o calculo. */ public void onItemSelected(AdapterView> adapterView, View view, int position, long id) { codigoOperacao = position; } @Override public void onNothingSelected(AdapterView> arg0) { codigoOperacao = SOMA; // operacao padrao e a soma } @Override public void onClick(View v) { // criando a janela de dialogo AlertDialog.Builder alert = new AlertDialog.Builder(this); // Uma das coisas interessantes em utilizar este AlertDialog no exemplo, foi // utilizar tambem o LayoutInflater conforme mostrado abaixo. // O LayoutInflater cria uma instancia de View baseando-se // no layout informado em inflater.inflate LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View viewForm = inflater.inflate(R.layout.layout_form, null); // Desta forma e possivel definir o conteudo do AlertDialog // como uma View ao inves de uma mensagem texto. alert.setView(viewForm); // Criamos entao os botoes para uma acao positiva e uma acao negativa // utilizando os devidos Listeners para click nos botoes. // Repare que a classe OnClickListener esta dentro de DialogInterface // e nao dentro de View como e utilizado para Buttons. alert.setPositiveButton("Calcular", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // aqui dentro recuperamos os dados registrados na view