/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.apis.os; import java.util.List; import android.app.Activity; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.graphics.Color; import android.os.Bundle; import android.telephony.SmsManager; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import android.widget.CompoundButton.OnCheckedChangeListener; import com.example.android.apis.R; public class SmsMessagingDemo extends Activity { /** Tag string for our debug logs */ private static final String TAG = "SmsMessagingDemo"; public static final String SMS_RECIPIENT_EXTRA = "com.example.android.apis.os.SMS_RECIPIENT"; public static final String ACTION_SMS_SENT = "com.example.android.apis.os.SMS_SENT_ACTION"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sms_demo); if (getIntent().hasExtra(SMS_RECIPIENT_EXTRA)) { ((TextView) findViewById(R.id.sms_recipient)).setText(getIntent().getExtras() .getString(SMS_RECIPIENT_EXTRA)); ((TextView) findViewById(R.id.sms_content)).requestFocus(); } // Enable or disable the broadcast receiver depending on the checked // state of the checkbox. CheckBox enableCheckBox = (CheckBox) findViewById(R.id.sms_enable_receiver); final PackageManager pm = this.getPackageManager(); final ComponentName componentName = new ComponentName("com.example.android.apis", "com.example.android.apis.os.SmsMessageReceiver"); enableCheckBox.setChecked(pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED); enableCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Log.d(TAG, (isChecked ? "Enabling" : "Disabling") + " SMS receiver"); pm.setComponentEnabledSetting(componentName, isChecked ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } }); final EditText recipientTextEdit = (EditText) SmsMessagingDemo.this .findViewById(R.id.sms_recipient); final EditText contentTextEdit = (EditText) SmsMessagingDemo.this .findViewById(R.id.sms_content); final TextView statusView = (TextView) SmsMessagingDemo.this.findViewById(R.id.sms_status); // Watch for send button clicks and send text messages. Button sendButton = (Button) findViewById(R.id.sms_send_message); sendButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (TextUtils.isEmpty(recipientTextEdit.getText())) { Toast.makeText(SmsMessagingDemo.this, "Please enter a message recipient.", Toast.LENGTH_SHORT).show(); return; } if (TextUtils.isEmpty(contentTextEdit.getText())) { Toast.makeText(SmsMessagingDemo.this, "Please enter a message body.", Toast.LENGTH_SHORT).show(); return; } recipientTextEdit.setEnabled(false); contentTextEdit.setEnabled(false); SmsManager sms = SmsManager.getDefault(); List messages = sms.divideMessage(contentTextEdit.getText().toString()); String recipient = recipientTextEdit.getText().toString(); for (String message : messages) { sms.sendTextMessage(recipient, null, message, PendingIntent.getBroadcast( SmsMessagingDemo.this, 0, new Intent(ACTION_SMS_SENT), 0), null); } } }); // Register broadcast receivers for SMS sent and delivered intents registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String message = null; boolean error = true; switch (getResultCode()) { case Activity.RESULT_OK: message = "Message sent!"; error = false; break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: message = "Error."; break; case SmsManager.RESULT_ERROR_NO_SERVICE: message = "Error: No service."; break; case SmsManager.RESULT_ERROR_NULL_PDU: message = "Error: Null PDU."; break; case SmsManager.RESULT_ERROR_RADIO_OFF: message = "Error: Radio off."; break; } recipientTextEdit.setEnabled(true); contentTextEdit.setEnabled(true); contentTextEdit.setText(""); statusView.setText(message); statusView.setTextColor(error ? Color.RED : Color.GREEN); } }, new IntentFilter(ACTION_SMS_SENT)); } }