2014-01-19 3 views
3

Я совершенно новый для Android-приложения dev. Я пытаюсь сделать кнопку, которая по щелчку откроет телефонную книгу (контакты); после этого я должен выбрать один или несколько контактов из списка. После этого, чтобы получить число (ы), хранящееся в переменной, в виде строки, содержащей одно или несколько чисел (в зависимости от того, сколько выбрано), что-то вроде - («+ XX XXX XXX, + XX XXX xXX»)Получить контактный номер и сохранить его как переменную из PhoneBook

I видел много кода для него, но я не мог реализовать ничего из этого, чтобы работать в конце.

Всего Код

import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.Contacts.People; 
import android.provider.ContactsContract; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.telephony.SmsManager; 

public class AndroidGPSTrackingActivity extends Activity { 

    private static final int PICK_CONTACT = 0; 

    protected static final int CHOOSE_CONTACTS = 0; 

    Button btnShowLocation; 

    // GPSTracker class 
    GPSTracker gps; 

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

     btnShowLocation = (Button) findViewById(R.id.btnShowLocation); 

     // show location button click event 
     btnShowLocation.setOnClickListener(new View.OnClickListener() { 



      @Override 
      public void onClick(View arg0) {   
       // create class object 
       gps = new GPSTracker(AndroidGPSTrackingActivity.this); 

       // check if GPS enabled  
       if(gps.canGetLocation()){ 

        double latitude = gps.getLatitude(); 
        double longitude = gps.getLongitude(); 


        String StringLong = decimalToDMS(longitude); 
        String StringLati = decimalToDMS(latitude); 

        // \n is for new line 
        Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + StringLati + "\nLong: " + StringLong, Toast.LENGTH_LONG).show();  

        //SENDING SMS CODE START 

        String phoneNumber = "5556"; 
        String message = "Moja GPS Lokacija je " + latitude + " " + longitude; 

        SmsManager smsManager = SmsManager.getDefault(); 
        smsManager.sendTextMessage(phoneNumber, null, message, null, null); 


         //SENDING SMS CODE END 



       }else{ 
        // can't get location 
        // GPS or Network is not enabled 
        // Ask user to enable GPS/network in settings 
        gps.showSettingsAlert(); 
       } 





      } 
     }); 

     // get contacts 
     //Button Click 
     View addNewContact; 
     addNewContact.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(Intent.ACTION_PICK); 
       intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 
       startActivityForResult(intent, CHOOSE_CONTACTS); 
      } 
     }); 
     //Button click end 



     Intent intent = new Intent(Intent.ACTION_PICK); 
     intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 
     startActivityForResult(intent, PICK_CONTACT); 

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

      switch (reqCode) { 
       case (PICK_CONTACT) : 
       if (resultCode == Activity.RESULT_OK) { 
        Uri contactData = data.getData(); 
         Cursor c = getContentResolver().query(contactData, null, null, null, null); 
         if (c.moveToFirst()) { 
         String name = c.getString(c.getColumnIndexOrThrow(People.NAME)); 
         String number = c.getString(c.getColumnIndexOrThrow(People.NUMBER)); 
         TextView perrsonname; 
         perrsonname.setText(name); 
         Toast.makeText(this, name + " has number " + number, Toast.LENGTH_LONG).show(); 
         } 
       } 
       break; 
      } 

     } 



     //end contacts 






    } 

    String decimalToDMS(double coord) { 
     String output, degrees, minutes, seconds; 

     // gets the modulus the coordinate divided by one (MOD1). 
     // in other words gets all the numbers after the decimal point. 
     // e.g. mod := -79.982195 % 1 == 0.982195 
     // 
     // next get the integer part of the coord. On other words the whole 
     // number part. 
     // e.g. intPart := -79 

     double mod = coord % 1; 
     int intPart = (int) coord; 

     // set degrees to the value of intPart 
     // e.g. degrees := "-79" 

     degrees = String.valueOf(intPart); 

     // next times the MOD1 of degrees by 60 so we can find the integer part 
     // for minutes. 
     // get the MOD1 of the new coord to find the numbers after the decimal 
     // point. 
     // e.g. coord := 0.982195 * 60 == 58.9317 
     // mod := 58.9317 % 1 == 0.9317 
     // 
     // next get the value of the integer part of the coord. 
     // e.g. intPart := 58 

     coord = mod * 60; 
     mod = coord % 1; 
     intPart = (int) coord; 
     if (intPart < 0) { 
      // Convert number to positive if it's negative. 
      intPart *= -1; 
     } 

     // set minutes to the value of intPart. 
     // e.g. minutes = "58" 
     minutes = String.valueOf(intPart); 

     // do the same again for minutes 
     // e.g. coord := 0.9317 * 60 == 55.902 
     // e.g. intPart := 55 
     coord = mod * 60; 
     intPart = (int) coord; 
     if (intPart < 0) { 
      // Convert number to positive if it's negative. 
      intPart *= -1; 
     } 

     // set seconds to the value of intPart. 
     // e.g. seconds = "55" 
     seconds = String.valueOf(intPart); 

     // I used this format for android but you can change it 
     // to return in whatever format you like 
     // e.g. output = "-79/1,58/1,56/1" 
     output = degrees + "° " + minutes + "' " + seconds + " \" "; 

     // Standard output of DMS 
     // output = degrees + "°" + minutes + "'" + seconds + "\""; 

     return output; 
    } 
} 

XML FILE

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="80dp" 
     android:src="@drawable/ic_launcher" 
     android:contentDescription="@string/plex_logo_description" /> 

    <Button 
     android:id="@+id/btnShowLocation" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="30dp" 
     android:text="@string/sendLocation" 
     android:background="#70bcba" 
     android:padding="10dp" 
     android:textColor="#fff" 
     android:textStyle="bold" 

     /> 


    <Button 
     android:id="@+id/addNewContact" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/btnShowLocation" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="60dp" 
     android:text="@string/choose_contact" 
     android:onClick="addNewContact" 
     /> 


</RelativeLayout> 

ответ

0

Откроется контакт, чтобы выбрать номер

Intent intent = new Intent(Intent.ACTION_PICK); 
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 
    startActivityForResult(intent, PICK_CONTACT); 

Теперь используйте onActivityResult, чтобы получить контакт

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

     switch (reqCode) { 
     case (PICK_CONTACT) : 
      if (resultCode == Activity.RESULT_OK) { 
       Uri contactData = data.getData(); 
       Cursor c = getContentResolver().query(contactData, null, null, null, null); 
       if (c.moveToFirst()) { 
        String name = c.getString(c.getColumnIndexOrThrow(People.NAME)); 
        String number = c.getString(c.getColumnIndexOrThrow(People.NUMBER)); 
        perrsonname.setText(name); 
        Toast.makeText(this, name + " has number " + number, Toast.LENGTH_LONG).show(); 
       } 
      } 
     break; 
     } 

    } 

Не забудьте добавить Прочитать контактное лицо.

обновление: -

внутри вашей oncreate() добавить следующее и удалить предыдущий код из моего ответа.

Button addNewContact = (Button) findViewById(R.id.addNewContact); 
addNewContact.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent intent = new Intent(Intent.ACTION_PICK); 
        intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 
        startActivityForResult(intent, CHOOSE_CONTACTS); 
       } 
      }); 

удалить код от комментариев get contacts к end contacts.

+0

Это сработало Только что задал вопрос, как связать этот код с одним нажатием кнопки? –

+0

Спасибо, что у меня просто ошибка в строке «public void onActivityResult (int reqCode, int resultCode, Intent data)» Говоря: множественные маркеры в этой строке -Syntax error on token ")",; Ожидается, - Пустота недопустимый тип переменной на ActivityResult -Syntax ошибки на маркер «(»; ожидается -Syntax ошибка маркер «„; ожидается -Syntax ошибка маркер“,»; ожидается –

+0

опубликуйте весь код, я думаю, что где-то вы забыли поставить ';' –