2015-04-15 2 views
0

Итак, у меня есть мой класс сообщений SMS. Тем не менее, мне бы хотелось, чтобы пользователь нажал на edittext для ввода номера телефона ... телефонная книга телефона загрузилась, и пользователь может выбрать один или несколько контактов, а SMS отправится ко всем выбранным контактам. Как загрузить и выбрать контакты с помощью телефонной книги для моего SMS?Доступ к контактам в телефонной книге для SMS-сообщений?

я немного застрял я мог получить объяснение, пожалуйста :)

Класс:

Button btnSendSMS; 
    EditText txtPhoneNo; 
    EditText txtMessage; 

    private static final int ACTION_PICK_CONTACT=1; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_send_sms); 
     btnSendSMS = (Button) findViewById(R.id.btnSendSMS); 
     txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo); 
     txtMessage = (EditText) findViewById(R.id.txtMessage); 

     txtPhoneNo.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
      startActivityForResult(i, ACTION_PICK_CONTACT); 
      } 
     }); 


     btnSendSMS.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       String phoneNo = txtPhoneNo.getText().toString(); 
       String message = txtMessage.getText().toString() + displayLocation(); 
       displayLocation(); 

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


    } 


    public void onActivityResult(int reqCode, int resCode, Intent data) { 
     super.onActivityResult(reqCode, resCode, data); 

     switch (reqCode) { 
      case (ACTION_PICK_CONTACT) : 
       if (resCode == Activity.RESULT_OK) { 

        Uri contact = data.getData(); 
        Cursor cursor = managedQuery(contact, null, null, null, null); 
        if (cursor.moveToFirst()) { 
         String contact_id =cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 

         Cursor phoneCursor = getContentResolver().query(
           ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
           ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contact_id, 
           null, null); 
         phoneCursor.moveToFirst(); 
         String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex("data1")); //THE NUMBER TO SEND YOUR SMS 
        } 
       } 
       break; 
     } 
    } 

    private String displayLocation(){ 
      LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, new LocationListener(){ 
       @Override 
       public void onStatusChanged(String s, int i, Bundle bundle) {} 
       @Override 
       public void onProviderEnabled(String s) {} 
       @Override 
       public void onProviderDisabled(String s) {} 
       @Override 
       public void onLocationChanged(final Location location) {} 
      }); 
      Location myLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); 
      double longitude = myLocation.getLongitude(); 
      double latitude = myLocation.getLatitude(); 
      return "https://www.google.co.id/maps/@"+latitude+","+longitude; 
    } 





    //---sends a SMS message to another device--- 
    private void sendSMS(String phoneNumber, String message) 
    { 

     PendingIntent pi = PendingIntent.getActivity(this, 0, 
       new Intent(this, Home.class), 0); 
      SmsManager sms = SmsManager.getDefault(); 
      sms.sendTextMessage(phoneNumber, null, message, pi, null); 


     String SENT = "SMS_SENT"; 
     String DELIVERED = "SMS_DELIVERED"; 

     PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, 
       new Intent(SENT), 0); 

     PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
       new Intent(DELIVERED), 0); 

     //---when the SMS has been sent--- 
     registerReceiver(new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         Toast.makeText(getBaseContext(), "SMS sent", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case android.telephony.gsm.SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
         Toast.makeText(getBaseContext(), "Generic failure", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case android.telephony.gsm.SmsManager.RESULT_ERROR_NO_SERVICE: 
         Toast.makeText(getBaseContext(), "No service", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case android.telephony.gsm.SmsManager.RESULT_ERROR_NULL_PDU: 
         Toast.makeText(getBaseContext(), "Null PDU", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case android.telephony.gsm.SmsManager.RESULT_ERROR_RADIO_OFF: 
         Toast.makeText(getBaseContext(), "Radio off", 
           Toast.LENGTH_SHORT).show(); 
         break; 
       } 
      } 
     }, new IntentFilter(SENT)); 

     //---when the SMS has been delivered--- 
     registerReceiver(new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         Toast.makeText(getBaseContext(), "SMS delivered", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case Activity.RESULT_CANCELED: 
         Toast.makeText(getBaseContext(), "SMS not delivered", 
           Toast.LENGTH_SHORT).show(); 
         break; 
       } 
      } 
     }, new IntentFilter(DELIVERED)); 

     android.telephony.gsm.SmsManager smms = android.telephony.gsm.SmsManager.getDefault(); 
     smms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 
    } 
+0

Используйте 'новый Intent (Intent.ACTION_PICK, Контакты .CONTENT_URI) ' – itechevo

+0

@itechevo ... Я пробовал свой бит следующим образом: txtPhoneNo.setOnClickListener (onNewIntent (Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI)); и метод реализации возвращает null. Кажется, все работает? Не могли бы вы уточнить :) –

ответ

0

Используйте это так:

int ACTION_PICK_CONTACT=1; 

//Call this in your onclick event 
Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
startActivityForResult(i, ACTION_PICK_CONTACT); 

//This is called when user has selected a contact 
public void onActivityResult(int reqCode, int resCode, Intent data) { 
    super.onActivityResult(reqCode, resultCode, data); 

    switch (reqCode) { 
    case (ACTION_PICK_CONTACT) : 
     if (resCode == Activity.RESULT_OK) { 

      Uri contact = data.getData(); 
      Cursor cursor = managedQuery(contact, null, null, null, null); 
      if (cursor.moveToFirst()) { 
      String contact_id =cursor.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 

      Cursor phoneCursor = getContentResolver().query( 
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contact_id, 
        null, null); 
      phoneCursor.moveToFirst(); 
      String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex("data1")); //THE NUMBER TO SEND YOUR SMS 
      txtPhoneNo.setText(phoneNumber); 
      } 
     } 
     break; 
    } 
} 
+0

@itechevo ... Я редактировал свой код с помощью вашего, сделал несколько изменений, причиной стало получение ошибок. Он загружает телефонную книгу, но когда я нажимаю на пользователя, он не отображается в тексте редактирования с номером? Почему не хранится? –

+0

Вы устанавливаете текстовое поле редактирования с номером, который вы извлекли из onActivityResult? – itechevo

+0

@itechevo ... У меня нет номера строки String и пыталась просто ссылаться на txtPhoneNo, но это не работает, так что мне делать? Я считаю, что это последняя строка, которая удерживает все это? –

Смежные вопросы