Android: задержка сообщений возможна через счетчики - PullRequest
0 голосов
/ 27 октября 2011

Пользователь выбирает из 4 вариантов того, как долго будет задержка в счетчике (например, 15, 30, 60 секунд или нет задержки), затем, когда он нажимает кнопку отправки, задержка вступит в силу до того, как сообщение действительно отправится.затем, когда он отправит сообщение, появится тост, уведомляющий пользователя о том, что его сообщение отправлено.

Вопрос в том, как реализовать задержку на счетчике?Это будет в OnitemSelected?тогда задержать это там?или что-то еще?

Вот код:

public class KAHTextApp extends Activity {
    Button btnRecipient;
    Button btnSend;
    EditText editTextRecipient;
    EditText editTextNewMessage;
    Spinner spinnerTimeDelay;

    private static final int CONTACT_PICKER_RESULT = 1001;

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

        btnRecipient = (Button) findViewById(R.id.button_recipient_picker);
        btnSend = (Button) findViewById(R.id.button_send);
        editTextRecipient = (EditText) findViewById(R.id.editText_recipient);
        editTextNewMessage = (EditText) findViewById(R.id.editText_new_message);
        spinnerTimeDelay = (Spinner) findViewById(R.id.spinner_delay);

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.delay_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerTimeDelay.setAdapter(adapter);
        spinnerTimeDelay.setOnItemSelectedListener(new TimeDelay());

        btnRecipient.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                startActivityForResult(intent, CONTACT_PICKER_RESULT);
            }
        });
    }

    @Override
    public void onActivityResult(int reqCode, int resultCode, Intent data) {
        super.onActivityResult(reqCode, resultCode, data);

        switch (reqCode) {
            case (CONTACT_PICKER_RESULT):

                if (resultCode == Activity.RESULT_OK) {
                    StringBuilder sb = new StringBuilder();
                    Uri contactData = data.getData();
                    Cursor contactsCursor = managedQuery(contactData,
                            null, null, null, null);
                    if (contactsCursor.moveToFirst()) {
                        String id = contactsCursor.getString(contactsCursor
                                .getColumnIndexOrThrow(ContactsContract.Contacts._ID));
                        String name = contactsCursor.getString(contactsCursor
                                .getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
                        String hasPhoneNumber = contactsCursor.getString(contactsCursor
                                .getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                        sb.append(name);
                        if (Integer.parseInt(hasPhoneNumber) > 0) {
                            Uri myPhoneUri = Uri.withAppendedPath(
                                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, id);
                            Cursor phoneCursor = managedQuery(
                                    myPhoneUri, null, null, null, null);
                            for (phoneCursor.moveToFirst(); !phoneCursor.isAfterLast(); phoneCursor.moveToNext()) {
                                String phoneNumber = phoneCursor.getString(phoneCursor
                                        .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
                                sb.append(phoneNumber);
                            }
                        } else {
                            sb.append("This contact doesn't have a phone number");
                        }
                        editTextRecipient.setText(sb.toString());
                    }
                }
                break;
            }

        btnSend.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                String phoneNo = editTextRecipient.getText().toString();
                String message = editTextNewMessage.getText().toString(); 

                if (phoneNo.length()>0 && message.length()>0)   
                    Toast.makeText(getBaseContext(), 
                            "Message sent!", 
                            Toast.LENGTH_SHORT).show();
                    /*sendSMS(phoneNo, message);  */              
                else
                    Toast.makeText(getBaseContext(), 
                        "Please enter both phone number and message.", 
                        Toast.LENGTH_SHORT).show();
            }
        });        
    }

и вот код для счетчика:

public class TimeDelay implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
          Toast.makeText(parent.getContext(), "The delay is " +
              parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
        }

        public void onNothingSelected(AdapterView<?> parent) {
          // Do nothing.
        }
    }

1 Ответ

0 голосов
/ 27 октября 2011

использовать таймер (обработчики) для задержки, значит написать код для отправки и всплывающего сообщения и вызвать эту функцию в зависимости от времени задержки (выбирается из счетчика), просто выберите значение из счетчика.используя это значение, вызовите функцию (задержка).

handler = new Handler(); 
handler.postDelayed(checkFunction(), n*1000);  // 1000 means 1 second
                                               // n is value selected from spinner. 

это функция

private Runnable checkFunction(){ 
    tt = new TimerTask() {            
      public void run() { 
          handler.postDelayed(checkFunction(),1000);
              //// write code depending on your requirement..
      }
  };          
    return tt;
} 

spinner

 ArrayAdapter<MyFont> fontArrayAdapter = new ArrayAdapter<MyFont>(this, 
                                        R.layout.spinner_layout, fontArray);
    fontArrayAdapter.setDropDownViewResource(R.layout.dropdown_spinner);
    font_spinner.setAdapter(fontArrayAdapter);
    font_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
            MyFont f = fontArray[pos];
            String selected_font = f.getValue();
            System.out.println("selected one is "+selected_font);
            int item = pos;
            System.out.println("selected one is "+item);
        }
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });
...