অ্যান্ড্রয়েড পরিচিতি তালিকা কল কিভাবে?


131

আমি একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করছি, এবং ফোনের যোগাযোগ তালিকায় কল করা দরকার। আমার পরিচিতি তালিকার ফাংশনটি কল করতে হবে, একটি পরিচিতি বাছাই করতে হবে, তারপরে যোগাযোগের নামটি দিয়ে আমার অ্যাপে ফিরে যেতে হবে। আমি ইন্টারনেটে পেয়েছি কোড এখানে, কিন্তু এটি কাজ করে না।

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class Contacts extends ListActivity {

    private ListAdapter mAdapter;
    public TextView pbContact;
    public static String PBCONTACT;
    public static final int ACTIVITY_EDIT=1;
    private static final int ACTIVITY_CREATE=0;

    // Called when the activity is first created. 
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        Cursor C = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
        startManagingCursor(C);

        String[] columns = new String[] {People.NAME};
        int[] names = new int[] {R.id.row_entry};

        mAdapter = new SimpleCursorAdapter(this, R.layout.mycontacts, C, columns, names);
        setListAdapter(mAdapter);
    } // end onCreate()
    // Called when contact is pressed
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Cursor C = (Cursor) mAdapter.getItem(position);
        PBCONTACT = C.getString(C.getColumnIndex(People.NAME));

        // RHS 05/06
        //pbContact = (TextView) findViewById(R.id.myContact);
        //pbContact.setText(new StringBuilder().append("b"));

        Intent i = new Intent(this, NoteEdit.class);
        startActivityForResult(i, ACTIVITY_CREATE);
    }
}

কোডের প্রথম অংশটি অন্তর্ভুক্ত করার জন্য আপনি কোড বিভাগটি ঠিক করতে পারেন: android.app.ListActivity আমদানি করুন ...
ডেভিড গ্লাস

১. 1. এবং ২.২ এর উদাহরণ: কোডরঞ্চ.
ব্লুন্ডেল

চেষ্টা অ্যান্ড্রয়েড যোগাযোগ নিষ্কর্ষক । একটি ছোট সাধারণ সহজ লাইব্রেরি
নীতেশ

উত্তর:


250

আমি আপনার নমুনা কোডটি কী করণীয় তা 100% নিশ্চিত নই, তবে নিম্নলিখিত স্নিপেট আপনাকে 'পরিচিতিগুলির তালিকার ফাংশনটি কল করতে, একটি যোগাযোগ বাছাই করতে, এবং তারপরে যোগাযোগের নামটি দিয়ে [আপনার] অ্যাপ্লিকেশনটিতে ফিরে আসতে সহায়তা করবে।

এই প্রক্রিয়াটির তিনটি পদক্ষেপ রয়েছে।

1. অনুমতি

আপনার অ্যাপ্লিকেশন ম্যানিফেস্টে যোগাযোগের ডেটা পড়ার অনুমতি যুক্ত করুন।

<uses-permission android:name="android.permission.READ_CONTACTS"/>

২) যোগাযোগ পিকারকে কল করা হচ্ছে

আপনার ক্রিয়াকলাপের মধ্যে, এমন একটি উদ্দিষ্ট তৈরি করুন যা সিস্টেমকে এমন কোনও ক্রিয়াকলাপ সন্ধান করতে বলে যা যোগাযোগের ইউআরআইয়ের আইটেমগুলি থেকে একটি পিক ক্রিয়া করতে পারে।

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);

কল করুন startActivityForResult, এই উদ্দেশ্যটি দিয়ে যাচ্ছেন (এবং একটি অনুরোধ কোড পূর্ণসংখ্যা, PICK_CONTACTউদাহরণ হিসাবে) এটি একটি কার্যকলাপ সমর্থন নিবন্ধিত এর আরম্ভ করার জন্য অ্যান্ড্রয়েড কারণ হবে ACTION_PICKউপর People.CONTENT_URIযখন নির্বাচন সম্পন্ন করা হয় (বা বাতিল), তারপর এই কার্যকলাপ ফিরে যান।

startActivityForResult(intent, PICK_CONTACT);

৩. ফলাফলের জন্য শুনছি

এছাড়াও আপনার ক্রিয়াকলাপে, onActivityResultআপনি পদক্ষেপ 2 এ চালু করেছেন এমন 'পরিচিতি নির্বাচন করুন' ক্রিয়াকলাপ থেকে রিটার্ন শোনার পদ্ধতিটি ওভাররাইড করুন আপনার ফিরে আসা অনুরোধ কোডটি আপনার প্রত্যাশার মানটির সাথে মেলে এবং ফলাফল কোডটি তা পরীক্ষা করে দেখুন RESULT_OK

ডেটা ইনটেন্ট প্যারামিটারে কল getData()করে আপনি নির্বাচিত যোগাযোগের ইউআরআই পেতে পারেন । নির্বাচিত পরিচিতির নাম পেতে আপনাকে সেই নতুন ইউআরআই তৈরি করতে ইউআরআই ব্যবহার করতে হবে এবং ফিরে আসা কার্সর থেকে নামটি বের করতে হবে।

@Override
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.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
          // TODO Whatever you want to do with the selected contact name.
        }
      }
      break;
  }
}

সম্পূর্ণ উত্স কোড: টিউটোরিয়ালস- android.blogspot.com (কিভাবে অ্যান্ড্রয়েড পরিচিতি তালিকা কল করতে হবে)


41
মনে হচ্ছে সাম্প্রতিক অ্যান্ড্রয়েড এপিআই দিয়ে এই কোডটির অনেকাংশ অবনতি হয়েছে। কারও কি আপডেট ভার্সন আছে?
ইয়ামস্পগ

প্রশ্ন: আমি যদি কোনও পরিচিতি বাছাইয়ের পরে যদি একটি সাবঅ্যাক্টিভিটি বন্ধ করতে চাই (যাতে আমাদের আবার যোগাযোগের তালিকায় ফিরে আসার উপায় থাকে), তবে কী অভিপ্রায়? অ্যাকশন_পিক এখনও কাজ করবে? আমি ভাবতে শুরু করছি যে আমার নিজের কার্সারটি রোল করতে হবে এবং মূল প্রশ্নের মতো সেটলিস্টএডাপ্টার ব্যবহার করতে হবে। হুম ...
জো

6
এখানে কিছুই ভুল নয় ... এখানে ব্যবহারকারী নিয়ন্ত্রণে থাকার কারণে আপনার কাছে পুনরায় যোগাযোগের অনুমতি প্রয়োজন হবে না। অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে পরিচিতিগুলি পড়ে না, বরং একটি পরিচিতি তালিকা পপ করে। কেবলমাত্র যখন ব্যবহারকারী কোনও পরিচিতি নির্বাচন করে (ম্যানুয়াল অ্যাকশন) সেই অ্যাপ্লিকেশনটি সেই পরিচিতি তথ্যের সাথে সম্পর্কিত ডেটার একটি সীমাবদ্ধ সেট পুনরুদ্ধারে সক্ষম।
ddewaele

1
আমি ব্যবহারকারীকে আমার 4.0+ অ্যান্ড্রয়েড ফোনে রেড অনুমতি ছাড়াই একটি পরিচিতি বাছাই করতে সক্ষম হয়েছি কিন্তু 1.6 এ নয়। এই কার্যকারিতাটি কী সংস্করণে এসেছিল তা যে কেউ জানেন?
amit

1
PICK_CONTACT আমার জন্য ব্যর্থ হচ্ছে। আপনি এটি কীভাবে শুরু করলেন?
user3104760

67

অ্যান্ড্রয়েড ২.২ ফ্রয়েও রিলিজের জন্য আমি এটি এইভাবে করি: মূলত একটি শ্রেণি তৈরি করতে গ্রহনটি ব্যবহার করুন: পাবলিক ক্লাস সোমারপিক কনট্যাক্টনেম ক্রিয়াকলাপ প্রসারিত করে

তারপরে এই কোডটি .োকান। কোডের আমার সংস্করণে রেফারেন্স করা ব্যক্তিগত শ্রেণীর ভেরিয়েবল এবং কনস্ট্যান্টগুলি যুক্ত করতে ভুলবেন না:

protected void onCreate(Bundle savedInstanceState) 
{
  super.onCreate(savedInstanceState);       
  Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
  startActivityForResult(intentContact, PICK_CONTACT);
}//onCreate

public void onActivityResult(int requestCode, int resultCode, Intent intent) 
{

  if (requestCode == PICK_CONTACT)
  {         
    getContactInfo(intent);         
    // Your class variables now have the data, so do something with it. 
  }
}//onActivityResult

protected void getContactInfo(Intent intent)
{

   Cursor cursor =  managedQuery(intent.getData(), null, null, null, null);      
   while (cursor.moveToNext()) 
   {           
       String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
       name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

       String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

       if ( hasPhone.equalsIgnoreCase("1"))
           hasPhone = "true";
       else
           hasPhone = "false" ;

       if (Boolean.parseBoolean(hasPhone)) 
       {
        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
        while (phones.moveToNext()) 
        {
          phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        }
        phones.close();
       }

       // Find Email Addresses
       Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,null, null);
       while (emails.moveToNext()) 
       {
        emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
       }
       emails.close();

    Cursor address = getContentResolver().query(
                ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
                null,
                ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = " + contactId,
                null, null);
    while (address.moveToNext()) 
    { 
      // These are all private class variables, don't forget to create them.
      poBox      = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
      street     = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
      city       = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
      state      = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
      postalCode = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
      country    = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
      type       = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
    }  //address.moveToNext()   
  }  //while (cursor.moveToNext())        
   cursor.close();
}//getContactInfo

অ্যাপ্লিকেশন ক্র্যাশ হয়, যখন দ্বিতীয়বার ইমেল পাওয়ার চেষ্টা করা হয়। সম্পাদনা করুন: অন্য কেউ যদি একই ত্রুটি পেয়ে থাকে তবে কেবল "কার্সার.ক্লোজ ()" মুছুন; stackoverflow.com/questions/9696868/...
alicanbatur

14

কন্ট্যাক্টস কনট্রাক্ট এপিআই ব্যবহার করে কোনও এপিআই লেভেল 5 সমাধানের সন্ধানের জন্য আপনি নীচের কোডগুলির সাথে উপরের কোডটি কিছুটা সংশোধন করতে পারেন:

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

এবং তারপরেঅ্যাক্টিভিটিআরসাল্টে কলামের নামটি ব্যবহার করুন:

  ContactsContract.Contacts.DISPLAY_NAME

1
যোগাযোগের ফোন নম্বর প্রদর্শন করার জন্য কী আছে?
উসমান মাসউদ

অ্যান্ড্রয়েড 1.6 এ ধরণের কোনও ক্লাস নেই। আমি পরিচিতিগুলিতে অনুরূপ নামগুলি খুঁজে পেয়েছি ont কন্টাক্টমেথডস তবে আমি কেবল ব্যতিক্রম পেয়েছি (এ জাতীয় ক্রিয়াকলাপটি খুঁজে পাই না)। তবে
রেটোর

8

যোগাযোগ পেতে কোড স্নিপেট এখানে:

package com.contact;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class GetContactDemoActivity extends Activity implements OnClickListener {

private Button btn = null;
private TextView txt = null;

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

    btn = (Button) findViewById(R.id.button1);
    txt = (TextView) findViewById(R.id.textView1);

    btn.setOnClickListener(this);
}

@Override
public void onClick(View arg0) {
    if (arg0 == btn) {
        try {
            Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
            startActivityForResult(intent, 1);
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("Error in intent : ", e.toString());
        }
    }
}

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

    try {
        if (resultCode == Activity.RESULT_OK) {
            Uri contactData = data.getData();
            Cursor cur = managedQuery(contactData, null, null, null, null);
            ContentResolver contect_resolver = getContentResolver();

            if (cur.moveToFirst()) {
                String id = cur.getString(cur.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
                String name = "";
                String no = "";

                Cursor phoneCur = contect_resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null);

                if (phoneCur.moveToFirst()) {
                    name = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    no = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                }

                Log.e("Phone no & name :***: ", name + " : " + no);
                txt.append(name + " : " + no + "\n");

                id = null;
                name = null;
                no = null;
                phoneCur = null;
            }
            contect_resolver = null;
            cur = null;
            //                      populateContacts();
        }
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
        Log.e("IllegalArgumentException :: ", e.toString());
    } catch (Exception e) {
        e.printStackTrace();
        Log.e("Error :: ", e.toString());
    }
}

}


6
        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
        while (phones.moveToNext())
        {
        String Name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)
        String Number=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

        }

5
public void onActivityResult(int requestCode, int resultCode, Intent intent) 
{
  if (requestCode == PICK_CONTACT && intent != null) //here check whether intent is null R not
  {  
  }
}

কারণ কোনও পরিচিতি নির্বাচন না করে এটি একটি ব্যতিক্রম দেয় give এই শর্তটি পরীক্ষা করা আরও ভাল


5

সম্পূর্ণ কোডটি নীচে দেওয়া হল

    package com.testingContect;

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

    public class testingContect extends Activity implements OnClickListener{
    /** Called when the activity is first created. */

    EditText ed;
    Button bt;
    int PICK_CONTACT;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bt=(Button)findViewById(R.id.button1);
        ed =(EditText)findViewById(R.id.editText1);
        ed.setOnClickListener(this);
        bt.setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {

        switch(v.getId())
        {
        case R.id.button1:

            break;
        case R.id.editText1:
             Intent intent = new Intent(Intent.ACTION_PICK);
              intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
              startActivityForResult(intent, PICK_CONTACT);


            break;

        }

    }
    public void onActivityResult(int requestCode, int resultCode, Intent intent) 
    {

      if (requestCode == PICK_CONTACT)
      {         
          Cursor cursor =  managedQuery(intent.getData(), null, null, null, null);
          cursor.moveToNext();
          String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
           String  name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

          Toast.makeText(this, "Contect LIST  =  "+name, Toast.LENGTH_LONG).show(); 
      }
    }//onActivityResult
}//class ends

1
PICK_CONTACT কোথায় শুরু করা হয়েছে?
এডওয়ার্ড ফাল

1
এটা তোলে কার্যকলাপ বর্গ উপরের ঘোষণা করা হল: private static final int PICK_CONTACT = 1;
ওমর

3

আমার অবাক করে দেওয়ার জন্য আপনাকে নামগুলি এবং কিছু প্রাথমিক তথ্য পড়ার জন্য ব্যবহারকারীদের অনুমতি CONTACT_READ লাগবে না (যোগাযোগটি কি তারকাচিহ্নিত হয়েছিল, শেষ কলিংয়ের সময়টি কী ছিল)? তবে ফোন নম্বর হিসাবে যোগাযোগের বিশদটি পড়তে আপনার অনুমতি দরকার।


3

অ্যান্ড্রয়েড যোগাযোগ তালিকার সাথে কাজ করার সময় সাবধান হন।

উপরের পদ্ধতিগুলিতে যোগাযোগের তালিকাটি পড়া এইচটিসি ওয়ান এবং সনি এক্সপেরিয়া ব্যতীত বেশিরভাগ অ্যান্ড্রয়েড ডিভাইসে কাজ করে। আমার ছয় সপ্তাহ নষ্ট হয়ে গেছে যা ভুল তা বোঝার চেষ্টা করে!

সর্বাধিক অনলাইন উপলব্ধ টিউটোরিয়াল প্রায় একই রকম - প্রথম পঠিত "সব" পরিচিতি, তারপর দেখা Listviewসঙ্গে ArrayAdapter। এটি মেমরি দক্ষ সমাধান নয়। প্রথমে অন্য ওয়েবসাইটে সমাধানগুলি সন্ধান করার পরিবর্তে, বিকাশকারী.অ্যান্ড্রয়েড.কম এ দেখুন। ডেভেলপার.অ্যান্ড্রয়েড.কম এ যদি কোনও সমাধান না পাওয়া যায় তবে আপনার অন্য কোথাও দেখতে হবে।

সমাধানটি যোগাযোগের তালিকা পুনরুদ্ধারের CursorAdapterপরিবর্তে ব্যবহার করা ArrayAdapter। ব্যবহার ArrayAdapterবেশিরভাগ ডিভাইসে কাজ করবে তবে এটি কার্যকর নয়। CursorAdapterআহরণ শুধুমাত্র একটি রান সময়ে যোগাযোগ তালিকার অংশ যখন ListViewস্ক্রল করা হচ্ছে।

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    ...
    // Gets the ListView from the View list of the parent activity
    mContactsList =
        (ListView) getActivity().findViewById(R.layout.contact_list_view);
    // Gets a CursorAdapter
    mCursorAdapter = new SimpleCursorAdapter(
            getActivity(),
            R.layout.contact_list_item,
            null,
            FROM_COLUMNS, TO_IDS,
            0);
    // Sets the adapter for the ListView
    mContactsList.setAdapter(mCursorAdapter);
}

পরিচিতিগুলির একটি তালিকা পুনরুদ্ধার করা : পরিচিতিগুলির একটি তালিকা পুনরুদ্ধার করা


1

যোগাযোগগুলি পড়তে আমি এই পদ্ধতিটি ব্যবহার করছি

public static List<ContactItem> readPhoneContacts(Context context) {
        List<ContactItem> contactItems = new ArrayList<ContactItem>();
        try {
            Cursor cursor = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null,
                    null, null, "upper("+ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + ") ASC");

            /*context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = ?",
                    new String[] { id },
                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" ASC");*/

            Integer contactsCount = cursor.getCount(); // get how many contacts you have in your contacts list
            if (contactsCount > 0) {
                while (cursor.moveToNext()) {

                    String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                    String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                        ContactItem contactItem = new ContactItem();
                        contactItem.setContactName(contactName);
                        //the below cursor will give you details for multiple contacts
                        Cursor pCursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                                new String[]{id}, null);
                        // continue till this cursor reaches to all phone numbers which are associated with a contact in the contact list
                        while (pCursor.moveToNext()) {
                            int phoneType = pCursor.getInt(pCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                            //String isStarred      = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.STARRED));
                            String phoneNo = pCursor.getString(pCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            //you will get all phone numbers according to it's type as below switch case.
                            //Logs.e will print the phone number along with the name in DDMS. you can use these details where ever you want.
                            switch (phoneType) {
                                case Phone.TYPE_MOBILE:
                                    contactItem.setContactNumberMobile(phoneNo);
                                    Log.e(contactName + ": TYPE_MOBILE", " " + phoneNo);
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
                                    contactItem.setContactNumberMobile(phoneNo);
                                    Log.e(contactName + ": TYPE_HOME", " " + phoneNo);
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
                                    contactItem.setContactNumberMobile(phoneNo);
                                    Log.e(contactName + ": TYPE_WORK", " " + phoneNo);
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE:
                                    contactItem.setContactNumberMobile(phoneNo);
                                    Log.e(contactName + ": TYPE_WORK_MOBILE", " " + phoneNo);
                                    break;
                                case Phone.TYPE_OTHER:
                                    contactItem.setContactNumberMobile(phoneNo);
                                    Log.e(contactName + ": TYPE_OTHER", " " + phoneNo);
                                    break;
                                default:
                                    break;
                            }
                        }
                        contactItem.setSelectedAddress(getContactPostalAddress(pCursor));
                        pCursor.close();
                        contactItems.add(contactItem);
                    }

                }
                cursor.close();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }


        return contactItems;
    }//loadContacts

1

হাই, আমার কাছে আপনার ডাটাবেসে যোগাযোগটি ভাগ করে নেওয়ার পছন্দ অনুসারে সংরক্ষণ করার কোড রয়েছে my

public class Main22Activity extends AppCompatActivity {
    EditText nameInput,phoneInput;
    TextView LargeText;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main22);
        nameInput = (EditText) findViewById(R.id.nameInput);
        phoneInput = (EditText) findViewById(R.id.phoneInput);

        LargeText = (TextView) findViewById(R.id.textView2);
    }

    public void saveInfo (View view){
        SharedPreferences sharedPref = getSharedPreferences("nameInfo" , Context.MODE_PRIVATE);
        SharedPreferences.Editor editor= sharedPref.edit();
        editor.putString("name", nameInput.getText().toString());
        editor.putString("phone", phoneInput.getText().toString());
        editor.apply();
        Toast.makeText(this, "Saved", Toast.LENGTH_LONG).show();
    }

    public void displayData(View view){
        SharedPreferences sharedPref = getSharedPreferences("nameInfo" , Context.MODE_PRIVATE);
        String name = sharedPref.getString("name", "");
        String ph = sharedPref.getString ("phone","");
        LargeText.setText(name + " " + ph);
    }
}

0
-> Add a permission to read contacts data to your application manifest.

<uses-permission android:name="android.permission.READ_CONTACTS"/>

-> Use Intent.Action_Pick in your Activity like below

Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
        startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT);

-> Then Override the onActivityResult()

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // check whether the result is ok
        if (resultCode == RESULT_OK) {
            // Check for the request code, we might be usign multiple startActivityForReslut
            switch (requestCode) {
            case RESULT_PICK_CONTACT:
               Cursor cursor = null;
        try {
            String phoneNo = null ;
            String name = null;           
            Uri uri = data.getData();            
            cursor = getContentResolver().query(uri, null, null, null, null);
            cursor.moveToFirst();           
            int  phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
            phoneNo = cursor.getString(phoneIndex); 

            textView2.setText(phoneNo);
        } catch (Exception e) {
            e.printStackTrace();
        }
                break;
            }
        } else {
            Log.e("MainActivity", "Failed to pick contact");
        }
    }

This will work check it out

0

আমি @ কলিন ম্যাকেনজি - III দ্বারা প্রদত্ত কোডটি ব্যবহার করি । অনেক ধন্যবাদ!

এমন একজনের জন্য যারা 'অবমুক্ত' পরিচালিত কুইয়ের প্রতিস্থাপনের সন্ধান করছেন:

1 ম, ভি 4 সাপোর্ট লাইব ব্যবহার করে ধরে নেওয়া:

import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;

2nd:

your_(activity)_class implements LoaderManager.LoaderCallbacks<Cursor>

3rd,

// temporarily store the 'data.getData()' from onActivityResult
private Uri tmp_url;

চতুর্থ, কলব্যাকগুলি ওভাররাইড করুন:

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    // create the loader here!
    CursorLoader cursorLoader = new CursorLoader(this, tmp_url, null, null, null, null);
    return cursorLoader;
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    getContactInfo(cursor); // here it is!
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
}

5 ম:

public void initLoader(Uri data){
    // will be used in onCreateLoader callback
    this.tmp_url = data;
    // 'this' is an Activity instance, implementing those callbacks
    this.getSupportLoaderManager().initLoader(0, null, this);
}

6th ষ্ঠ, উপরের কোডটি বাদে আমি স্বাক্ষর পরমকে ইন্টেন্ট থেকে কার্সারে পরিবর্তন করি:

protected void getContactInfo(Cursor cursor)
{

   // Cursor cursor =  managedQuery(intent.getData(), null, null, null, null);      
   while (cursor.moveToNext()) 
   {
        // same above ...
   } 

সপ্তম, ইনিগ্রোডারকে কল করুন:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (PICK_CONTACT == requestCode) {
        this.initLoader(data.getData(), this);
    }
}

অষ্টম, কোড এই টুকরা ভুলবেন না

    Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    this.act.startActivityForResult(intentContact, PICK_CONTACT);

তথ্যসূত্র:

অ্যান্ড্রয়েড ফান্ডামেন্টালস: সঠিকভাবে ডেটা লোড হচ্ছে

একটি ক্রিয়াকলাপে একটি লোডার শুরু করা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.