info@hamdsoft.ir hamd-soft

گروه برنامه نویسی حمد | Intent های ضمنی متداول - قسمت دوم (Contacts, SMS, DIAL)
Intent های ضمنی متداول - قسمت دوم (Contacts, SMS, DIAL)

به وسیله‌ی Intent میتوانیم از اندروید انجام کاری را تقاضا کنیم، مثلا باز کردن صفحه‎ی وب یا برقراری تماس و ... . در این مطلب قصد داریم چند نمونه از Intent های ضمنی دیگر را توضیح دهیم.

الف: مخاطبین
1-    انتخاب یک مخاطب:
برای این کار از اکشن ACTION_PICK استفاده میکنیم و Mime_Type را بر Contacts.CONTENT_TYPE قرار میدهیم. با این کار مخاطب انتخاب شده در متد onActivityResult() در اختیار ما قرار میگیرد. با این کار ما به تمام اطلاعات مخاطب دسترسی خواهیم داشت.


Action
ACTION_PICK
    Data URI Scheme
        none
MIME Type
    Contacts.CONTENT_TYPE

مثال:

static final int REQUEST_SELECT_CONTACT = 1;

public void selectContact() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_CONTACT);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) {
        Uri contactUri = data.getData();
        // Do something with the selected contact at contactUri
        ...
    }
}

نکته: وقتی برای خواندن اطلاعات یک مخاطب از روش فوق استفاده میکنید، نیازی به ثبت اجازه دسترسی(Permission) READ_CONTACTS در فایل androidManifest.xml نیست.

2-    گرفتن اطلاعات یک مخاطب:
برای اینکه بتوانید اطلاعات خاصی از یک مخاطب را دریافت کنید مثلا وقتی که فقط شماره تلفن مخاطب، یا ایمیل مخاطب را میخواهید باید اکشن را بر ACTION_PICK ست کنید و MIME_TYPE را یکی از مقادیری که ذکر خواهد شد قرار دهید.
در این حالت هم اطلاعات دریافت شده در متد onActivityResult در اختیارتان قرار میگیرد.


Action
ACTION_PICK
    Data URI Scheme
        none
MIME Type
CommonDataKinds.Phone.CONTENT_TYPE
    برای گرفتن شماره تلفن مخاطب
CommonDataKinds.Email.CONTENT_TYPE
    برای گرفتن ایمیل مخاطب
CommonDataKinds.StructuredPostal.CONTENT_TYPE
برای گرفتن آدرس پستی مخاطب

    مثال:

    static final int REQUEST_SELECT_PHONE_NUMBER = 1;

public void selectContact() {
    // Start an activity for the user to pick a phone number from contacts
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) {
        // Get the URI and query the content provider for the phone number
        Uri contactUri = data.getData();
        String[] projection = new String[]{CommonDataKinds.Phone.NUMBER};
        Cursor cursor = getContentResolver().query(contactUri, projection,
                null, null, null);
        // If the cursor returned is valid, get the phone number
        if (cursor != null && cursor.moveToFirst()) {
            int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER);
            String number = cursor.getString(numberIndex);
            // Do something with the phone number
            ...
        }
    }
}

3-    مشاهده‌ی جزئیات مخاطب خاص:
برای مشاهده جزئیات یک مخاطب خاص از اکشن ACTION_VIEW استفاده میکنیم.

Action
ACTION_VIEW
    Data URI Scheme
        content:<URI>


برای گرفتن URI دو راه وجود دارد:
راه اول: استفاده از URI که با اکشن ACTION_PICK بدست می آوریم و در قسمت قبلی توضیح داده شد. این روش نیازی به گرفتن دسترسی خاصی ندارد.
راه دوم: دسترسی مستقیم به لیست مخاطبین.

MIME Type
    None

مثال:
 

public void viewContact(Uri contactUri) {
    Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

4-    ویرایش یک مخاطب:
برای ویرایش یک مخاطب از اکشن ACTION_EDIT استفاده میکنیم و فیلدی که باید ویرایش شود را با مقدار جدیدش به صورت داده اضافی (Extras) در Intent ست میکنیم. نام داده اضافی هم باید از مقادیر ثابت کلاس ContactsContract.Intents.Insert استفاده شود. برای مثال برای ثبت ایمیل برای یک مخاطب باید داده اضافی را به صورت زیر ثبت کنید:
 

intent.putExtra(Intents.Insert.EMAIL, email);


Action
ACTION_EDIT
    Data URI Scheme
        content:<URI>
MIME Type
    none
Extras


    یکی از مقادیر ثابت کلاس ContactsContract.Intents.Insert
مثال:


 

public void editContact(Uri contactUri, String email) {
    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setData(contactUri);
    intent.putExtra(Intents.Insert.EMAIL, email);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

5-    درج مخاطب جدید:
برای درج مخاطب جدید از اکشن ACTION_INSERT استفاده میشود و همانند ویرایش مخاطب، باید مشخصات مخاطب به صورت داده اضافی برای Intent توضیح داده شوند.

Action
ACTION_INSERT
    Data URI Scheme
        content:<URI>
MIME Type
    none
Extras


    یکی از مقادیر ثابت کلاس ContactsContract.Intents.Insert

مثال:

public void insertContact(String name, String email) {
    Intent intent = new Intent(Intent.ACTION_INSERT);
    intent.setType(Contacts.CONTENT_TYPE);
    intent.putExtra(Intents.Insert.NAME, name);
    intent.putExtra(Intents.Insert.EMAIL, email);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}


ب: برقراری تماس
    برای برقراری تماس دو راه وجود دارد:
1-    استفاده از اکشن ACTION_DIAL و اختصاص دادن شماره تلفن به Intent. در این حالت نرم افزار شماره گیر تلفن باز شده و شماره مورد نظر در نرم افزار نشان داده میشود و برای برقراری تماس فقط کافیست کاربر بر روی کلید تماس کلیک کند.
2-    استفاده از اکشن ACTION_CALL و اختصاص دادن شماره تلفن به Intent. در این حالت به طور مستقیم با شماره مورد نظر تماس برقرار خواهد شد. در این حالت باید اجازه دسترسی(PERMISSION) زیر در فایل AndroidManifest.xml ثبت شده باشد:
 

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

Action
ACTION_DIAL      باز کردن نرم افزار شماره گیر
ACTION_CALL    برقراری مستقیم تماس
Data URI Scheme
tel:<phone-number>
voicemail:<phone-number>
MIME Type
None


مثال:

public void dialPhoneNumber(String phoneNumber) {
    Intent intent = new Intent(Intent.ACTION_DIAL);
    intent.setData(Uri.parse("tel:" + phoneNumber));
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}


ج- پیام رسانی:
برای ارسال یک پیام (SMS یا MMS) از اکشن های زیر استفاده میکنیم و متن پیام، شماره تلفن مقصد و دیگر جزینات را به صورت داده های اضافی (Extras) در Intent ست میکنیم:


Action
    ACTION_SENDTO
    ACTION_SEND
    ACTION_SEND_MULTIPLE
Data URI Scheme
    sms:<phone_number>
    smsto:<phone_number>
    mms:<phone_number>
    mmsto:<phone_number>
    
MIME Type
    PLAIN_TEXT_TYPE ("text/plain")
    "image/*"
    "video/*"
Extras
    "subject"
        موضوع پیام (برای پیام چندرسانه ای)
    "sms_body"
        رشته‌ی بدنه ی پیام

 

مثال:

public void composeMmsMessage(String message, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setType(HTTP.PLAIN_TEXT_TYPE);
    intent.putExtra("sms_body", message);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

باری اطمینان از اینکه پیام شما توسط نرم افزار پیام رسان ارسال شده باشد از اکشن ACTION_SENDTO استفاده کنید و DATA URI SCHEMA را به صورت smsto: ست کنید در غیر این صورت ممکن است برای این کار نرم افزارهایی مثل ایمیل یا نرم افزارهای شبکه های اجتماعی دیگر به کار برده شوند.

در مقاله بعدی Intent های پرکاربرد دیگر هم توضیح داده خواهند شد.

 

برچسب ها: android


نظر شما














تماس با ما

  • همراه: 09127507180
  • ایمیل: info@hamdsoft.ir
  • اسکایپ: hamd-soft

نقشه سایت

سایت های مفید


کلیه حقوق مادی و معنوی سایت متعلق به گروه برنامه نویسی حمد می باشد