counterexample

فعلن فقط برنامه نویسی

counterexample

فعلن فقط برنامه نویسی

شنبه, ۱۶ مرداد ۱۳۹۵، ۰۲:۱۴ ب.ظ

۱

در این آموزش قصد داریم روشی رو معرفی کنیم که بتونید باهاش به مخاطبای لیست مخاطبینتون (contacts) دسترسی پیدا کنید و بتونید مخاطبی رو ویرایش کنید یا یه مخاطب جدید به لیست اضافه کنید.

ساده ترین و کم خطا ترین و خلاصه ترین روش برای این کار اینه که از Intent استفاده کنیم تا اینکه مثلا از content providerها(که در پستهای آینده در موردشون مطالبی مینویسم) استفاده کنیم. منظورمون اینه که شما با یه intent مخصوص وصل میشید به اکتیویتی(activity) لیست مخاطبانتون و از اونجا هر کاری که بخواید میکنید که البته حین این اتصال، میتونید یه سری اطلاعات هم به مقصد بفرستید..


افزودن مخاطب:

خب برای اینکار، در ابتدا یه intent میسازیم:

// Creates a new Intent to insert a contact
Intent intent = new Intent(Intents.Insert.ACTION);
// Sets the MIME type to match the Contacts Provider
intent
.setType(ContactsContract.RawContacts.CONTENT_TYPE);


حالا اگه بخواید یه سری اطلاعات هم با intent بفرستید از کد های زیر استفاده کنید(مثلا تو برنامه خودتون از طرف اسم و شماره و ایمیل و ... رو گرفتید و میخواید وقتی که به لیست مخاطبانتون وصل میشید این اطلاعات خودشون مناسب پر شده باشن و نیاز به دوباره پر کردن اونها نباشه)

private EditText mEmailAddress = (EditText) findViewById(R.id.email);
private EditText mPhoneNumber = (EditText) findViewById(R.id.phone);

تو کد بالا فرض کردیم که شما تو برنامه تون دو تا edittext استفاده کردید؛ یکی برای شماره تلفن و یکی برای ایمیل مخاطبی که قراره به لیست مخاطبین اضافه بشه..


حال نحوه افزودن اطلاعات به intent:

intent.putExtra(Intents.Insert.EMAIL, mEmailAddress.getText())
      .putExtra(Intents.Insert.EMAIL_TYPE, CommonDataKinds.Email.TYPE_WORK)
      .putExtra(Intents.Insert.PHONE, mPhoneNumber.getText())
      .putExtra(Intents.Insert.PHONE_TYPE, Phone.TYPE_WORK);


و در آخر این اطلاعات رو ارسال و اکتیویتیمون رو اجرا میکنیم:

    startActivity(intent);



ویرایش مخاطب:

اما برای ویرایش یک مخاطب، باید یه ویژگی از اون مخاطب رو ارسال کنیم تا بتونیم مشخص کنیم دقیقا اطلاعات کیو میخوایم ویرایش کنیم؟
پس این بار برای ساخت intent:

// کرسری شامل ردیف کانتک:
    public Cursor mCursor;

    //شماره ردیفی از مشخصه مورد جستجو از کاربر:
    public int mLookupKeyIndex;

    // شماره ردیف ID کانتکت:
    public int mIdIndex;

    // مشخصه مورد جستجو در ردیفی که کرسر روی اون قرار داره:
    public String mCurrentLookupKey;

    // ID موجود در ردیفی که کرسر روی اون فرار گرفته:
    public long mCurrentId;

    // زمانی که کاربر مخاطبی رو برای ویرایش انتخاب میکنه، توسط این متغیر
// مقادیر کلید مورد جستجو و ID رو از کرسر میگیریم و URI رو میسازیم
    Uri mSelectedContactUri;
   
...

  // متغیرهایی که در بالا تعریف شده اند رو در زیر مقدار دهی میکنیم.
    mLookupKeyIndex = mCursor.getColumnIndex(Contacts.LOOKUP_KEY);
    mCurrentLookupKey
= mCursor.getString(mLookupKeyIndex);
    mIdIndex
= mCursor.getColumnIndex(Contacts._ID);
    mCurrentId
= mCursor.getLong(mIdIndex);
    mSelectedContactUri
=
           
Contacts.getLookupUri(mCurrentId, mCurrentLookupKey);
   
...
    // ساخت intent برای ویرایش مخاطب
    Intent editIntent = new Intent(Intent.ACTION_EDIT);

    //تنظیم کردن uri مخاطب و نوع داده ای مطابق با intent مورد نظر:
    editIntent.setDataAndType(mSelectedContactUri,Contacts.CONTENT_ITEM_TYPE);


اما با اعمال کدهای بالا، در اندروید های نسخه 4 و ماقبل آن، پس از ویرایش و ذخیره سازی مخاطب، اگر از دکمه back استفاده شود به بخش لیست مخاطبان وارد میشویم و وارد صفحه برنامه خود نمیشویم، برای رفع این ایراد یک کلید دیگر وارد intent خود میکنیم (finishActivityOnSaveCompleted) و مقدار آن را برابر true قرار میدهیم:

   // Sets the special extended data for navigation
    editIntent
.putExtra("finishActivityOnSaveCompleted", true);


و در آخر این اطلاعات رو ارسال و اکتیویتیمون رو اجرا میکنیم:

// Sends the Intent
    startActivity
(editIntent);

در انتها ذکر یک نکته الزامیست، اینکه شما نمیتونید تمام اطلاعات کاربرا رو ویرایش کنید، اطلاعات قابل ویرایش رو تو لینک https://developer.android.com/reference/android/provider/ContactsContract.Contacts.html و بخش update میتونید ببینید.

شاد باشید :)

موافقین ۱ مخالفین ۰ ۹۵/۰۵/۱۶
counter example

نظرات  (۱)

tashakor

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">