1

EditTextを介してユーザーによる文字列の入力を受け取り、それらを共有設定に入れ、SMSが受信されたときに自動SMSを送信するアプリを作成しています。共有設定の文字列を使用して、自動的に送信される電話番号とテキストメッセージを指定します。送信済。

送信する電話番号とテキストメッセージをハードコーディングしている限り、アプリは完全に機能します。共有設定の文字列をSendSMSメソッドに入れようとするとすぐに、アプリがクラッシュし、デバッグエラー「hasUserDataHeader:false」が発生します。

以下のコードは、名前EditTextから文字列を取得し、それをパラメーターTextMessageを介して送信されるメッセージとして使用しようとするバージョンです(このコード行については、ブロードキャストレシーバー内を参照してください)。これを「TextMessage」に置き換えると問題ありませんが、明らかにこれではテキストが動的に送信されません

以下のコード:

                import android.os.Bundle;
            import android.app.Activity;
            import android.view.Menu;
            import android.view.View;
            import android.widget.AdapterView;
            import android.widget.AdapterView.OnItemSelectedListener;
            import android.widget.ArrayAdapter;
            import android.widget.EditText;
            import android.widget.Spinner;
            import android.widget.Button;
            import android.app.PendingIntent;
            import android.content.Intent;
            import android.telephony.SmsManager;
            import android.content.BroadcastReceiver;
            import android.content.Context;
            import android.content.IntentFilter;
            import android.widget.TextView;
            import android.app.Notification;
            import android.app.NotificationManager;
            import android.content.SharedPreferences;

            public class MainActivity extends Activity {

                int notificationID = 1;
                String[] excuses;
                String excuseSelected;
                IntentFilter intentFilter;
                private SharedPreferences prefs;
                private String prefName = "MyPref";
                private static final String NUMBER_KEY = "number";
                private static final String NAME_KEY = "name";
                private static final String EXCUSE_KEY = "excuse"; 


                private BroadcastReceiver intentReceiver = new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context context, Intent intent) {

                        //---gather up all the necessary user input---
                        prefs = getSharedPreferences(prefName, MODE_PRIVATE);
                        String textMessage = (String) prefs.getString(NAME_KEY, "");
                        sendSMS("0403579838", textMessage);             
            //          }
                    }
                };

                @Override
                public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);

                    //---intent to filter for SMS messages received---
                    intentFilter = new IntentFilter();
                    intentFilter.addAction("SMS_RECEIVED_ACTION");

                    final Button btn1 = (Button)findViewById(R.id.buttonToggle);

                    excuses = getResources().getStringArray(R.array.excuses_array);
                    Spinner s1 = (Spinner) findViewById(R.id.spinnerExcuse);
                    final EditText EditTextNumber = (EditText) findViewById(R.id.editTextNumber);
                    final EditText EditTextName = (EditText) findViewById(R.id.editTextName);



                        //---Sorting the spinner view out for excuses selection---
                        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                                android.R.layout.simple_spinner_item, excuses);

                        s1.setAdapter(adapter);
                        s1.setOnItemSelectedListener(new OnItemSelectedListener()
                        {
                            public void onItemSelected(AdapterView<?> arg0, View arg1,
                                    int arg2, long arg3)
                            {
                                int index = arg0.getSelectedItemPosition();
                                excuseSelected = excuses[index];
                            }

                            public void onNothingSelected(AdapterView<?> arg0) {}
                        });

                    //---Setting the button to toggle between on and off---
                    btn1.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                            if (btn1.getText().equals("Turn on"))                       
                            {
                                btn1.setText("Turn off");
                                //---register the receiver---
                                registerReceiver(intentReceiver, intentFilter);
                                //---get the SharedPreferences object---
                                prefs = getSharedPreferences(prefName, MODE_PRIVATE);
                                SharedPreferences.Editor editor = prefs.edit();

                                //---set the user inputs to prefo's---
                                editor.putString(NUMBER_KEY, EditTextNumber.getText().toString());
                                editor.putString(NAME_KEY, EditTextName.getText().toString());
                                editor.putString(EXCUSE_KEY, excuseSelected);

                            }
                            else
                            {
                                btn1.setText("Turn on");
                                //---unregister the receiver---
                                unregisterReceiver(intentReceiver);
                            }
                        }
                    });

                }

                //---sends an SMS message to another device---
                public void sendSMS(String phoneNumber, String message)
                {
                    SmsManager sms = SmsManager.getDefault();
                    sms.sendTextMessage(phoneNumber, null, message, null, null);
                    displayNotification();
                }

                protected void displayNotification()
                {
                    Intent i = new Intent(this, NotificationView.class);
                    i.putExtra("notificationID", notificationID);

                    PendingIntent pendingIntent =
                        PendingIntent.getActivity(this, 0, i, 0);

                    NotificationManager nm = (NotificationManager)
                        getSystemService(NOTIFICATION_SERVICE);

                    Notification notif = new Notification(
                            R.drawable.ic_launcher,
                            "SMS has been sent by GirlfriendMinder",
                            System.currentTimeMillis());

                    CharSequence from = "GirlfriendMinder";
                    CharSequence message = "SMS has been sent by GirlfriendMinder";

                    notif.setLatestEventInfo(this, from, message, pendingIntent);

                    //---100ms delay, vibrate for 250ms, pause for 100ms, and then vibrate for 500ms---
                    notif.vibrate = new long[] { 100, 250, 100, 500};
                    nm.notify(notificationID, notif);
                }

                @Override
                protected void onDestroy() {
                    //---unregister the receiver---
                    unregisterReceiver(intentReceiver);
                    super.onPause();
                }
            }
4

1 に答える 1

1

あなたのコードでは:

//---Setting the button to toggle between on and off---
                    btn1.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                            if (btn1.getText().equals("Turn on"))                       
                            {
                                btn1.setText("Turn off");
                                //---register the receiver---
                                registerReceiver(intentReceiver, intentFilter);
                                //---get the SharedPreferences object---
                                prefs = getSharedPreferences(prefName, MODE_PRIVATE);
                                SharedPreferences.Editor editor = prefs.edit();

                                //---set the user inputs to prefo's---
                                editor.putString(NUMBER_KEY, EditTextNumber.getText().toString());
                                editor.putString(NAME_KEY, EditTextName.getText().toString());
                                editor.putString(EXCUSE_KEY, excuseSelected);

                            }
                            else
                            {
                                btn1.setText("Turn on");
                                //---unregister the receiver---
                                unregisterReceiver(intentReceiver);
                            }
                        }
                    });

                }

下:

editor.putString(EXCUSE_KEY, excuseSelected);

追加

editor.commit();
于 2012-09-06T12:44:26.413 に答える