الأغراض الشائعه

الإعلانات

الأغراض الشائعه

 

 

الأغراض الشائعه .. يسمح لك الغرض ببدء نشاط في تطبيق آخر، من خلال وصف إجراء بسيط، ترغب في تنفيذه (مثل “عرض خريطة” أو “التقاط صورة”) في كائن الغرض.

ويسمى هذا النوع من الأغراض، غرضاً ضمنياً؛ لأنه لا يحدد مكون التطبيق لبدئه، وإنما يحدد إجراءً، ويوفر بعض البيانات، لتنفيذ الإجراء بها.

عند إستدعاء ()startActivity أو ()startActivityForResult وتمريرها لغرض ضمني..

يقوم النظام بإيصال الغرض، إلى التطبيق الذي يمكنه التعامل مع الغرض، ومن ثم بدأ النشاط المطابق له.

إذا كان هناك أكثر من تطبيق يمكنه التعامل مع الغرض ، يعرض النظام للمستخدم مربع حوار لإختيار التطبيق المراد إستخدامه.

تصف هذه الصفحة العديد من الأغراض الضمنية، التي يمكنك إستخدامها لتنفيذ إجراءات شائعة، مرتبة حسب نوع التطبيق الذي يتعامل مع الغرض.

يوضح كل قسم أيضاً، كيف يمكنك إنشاء مرشح غرض، للإعلان عن قدرة تطبيقك على تنفيذ نفس الإجراء.

 

تحذير: إذا لم تكن هناك تطبيقات على الجهاز يمكنها أن تتلقى الغرض الضمني، فسيتعطل تطبيقك عندما يستدعي ()startActivity .

للتحقق أولاً من وجود تطبيق يتلقى الغرض، قم بإستدعاء ()resolveActivity على كائن الغرض الخاص بك.

إذا كانت النتيجة غير خالية، فهناك تطبيق واحد على الأقل يمكنه التعامل مع الغرض ومن الآمن إستدعاء ()startActivity .

إذا كانت النتيجة خالية، يجب ألا تستخدم الغرض، وإذا أمكن، يجب عليك تعطيل الميزة التي تستدعي الغرض.

إذا لم تكن على دراية بكيفية إنشاء أغراض أو مرشحات غرض، يجب عليك أولاً قراءة الأغراض و مرشحات الغرض.

لمعرفة كيفية تنشيط الأغراض الواردة في هذه الصفحة من مضيف التطوير الخاص بك، راجع التحقق من الأغراض بإستخدام مصحح أخطاء اندرويد.

 

 

 

 

إجراءات قوقل الصوتيه

تعمل إجراءات قوقل الصوتيه Google Voice، على تشغيل بعض الأغراض المدرجة في هذه الصفحة، إستجابةً للأوامر الصوتية.

لمزيد من المعلومات، راجع الأغراض التي تم إطلاقها بواسطة إجراءات قوقل الصوتيه.

 

 

 

 

المنبه


إنشاء منبه

 
إجراءات قوقل الصوتيه

إجراءات قوقل الصوتيه
  • “ضبط المنبه على 7 صباحاً”

 

لإنشاء تنبيه جديد، إستخدم إجراء ACTION_SET_ALARM وحدد تفاصيل المنبه مثل الوقت والرسالة، بإستخدام الإضافات المحددة أدناه.

ملاحظة: فقط تتوفر إضافات الساعة والدقائق والرسائل في أندرويد 2.3 (مستوى واجهة برمجة التطبيقات 9) وأقل. تم إضافة الإضافات الأخرى في الإصدارات الأحدث من النظام الأساسي.

 

 

الإجراء

ACTION_SET_ALARM

بيانات URI

لا شيء

نوع MIME

لا شيء

الإضافات

EXTRA_HOUR

ساعة المنبه

EXTRA_MINUTES

دقيقة المنبه

EXTRA_MESSAGE

رسالة مخصصة لتعريف المنبه

EXTRA_DAYS

قائمة مصفوفه ArrayList بما في ذلك، كل يوم في الأسبوع، الذي ينبغي تكرار هذا المنبه فيه.

يجب إعلان عن كل يوم بإستخدام عدد صحيح من فئة التقويم مثل MONDAY.

لضبط المنبه لمرة واحدة، لا تحدد هذه الإضافه.

EXTRA_RINGTONE

محتوى: URI يحدد نغمة رنين لإستخدامها للتنبيه، أو VALUE_RINGTONE_SILENT لعدم إستخدام نغمة رنين.

لإستخدام نغمة الرنين الإفتراضية، لا تقم بتحديد هذه الإضافه.

EXTRA_VIBRATE

قيمة منطقيه تحدد ما إذا كان هناك إهتزاز لهذا التنبيه أم لا.

EXTRA_SKIP_UI

قيمة منطقيه تحدد ما إذا التطبيق المستجيب، يجب عليه أن يتخطى واجهة مستخدمه، عند ضبط المنبه أم لا.

إذا كانت القيمه صحيح، فيجب على التطبيق تجاوز أية واجهة مستخدم للتأكيد وببساطه ضبط المنبه المحدد.

مثال على الغرض:

KOTLIN

fun createAlarm(message: String, hour: Int, minutes: Int) {
    val intent = Intent(AlarmClock.ACTION_SET_ALARM).apply {
        putExtra(AlarmClock.EXTRA_MESSAGE, message)
        putExtra(AlarmClock.EXTRA_HOUR, hour)
        putExtra(AlarmClock.EXTRA_MINUTES, minutes)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

JAVA

public void createAlarm(String message, int hour, int minutes) {
    Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_HOUR, hour)
            .putExtra(AlarmClock.EXTRA_MINUTES, minutes);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

 

ملاحظه:

لإستدعاء غرض ACTION_SET_ALARM، يجب أن يكون لدى تطبيقك إذن SET_ALARM:

مثال على مرشح الغرض

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_ALARM" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

 

 

 

 

إنشاء المؤقت

إجراءات قوقل الصوتيه
  • “ضبط المؤقت لمدة 5 دقائق”

لإنشاء مؤقت للعد التنازلي، إستخدم إجراء ACTION_SET_TIMER وحدد تفاصيل المؤقت مثل المدة، بإستخدام الإضافات المحددة أدناه.

ملاحظة: تمت إضافة هذا الغرض في أندرويد 4.4 (المستوى 19).

 

الإجراء

ACTION_SET_TIMER

بيانات URI

لا شيء

نوع MIME

لا شيء

إضافات

EXTRA_LENGTH

طول المؤقت بالثواني.

EXTRA_MESSAGE

رسالة مخصصة لتحديد المؤقت.

EXTRA_SKIP_UI

قيمه منطقيه، تحدد ما إذا كان يجب أن يتخطى التطبيق المستجيب، واجهة المستخدم عند تعيين المؤقت.

إذا كانت القيمه صحيح، فيجب أن يتجاوز التطبيق أي تأكيد لواجهة المستخدم ويبدأ ببساطة المؤقت المحدد.

مثال على الغرض:

KOTLIN

fun startTimer(message: String, seconds: Int) {
    val intent = Intent(AlarmClock.ACTION_SET_TIMER).apply {
        putExtra(AlarmClock.EXTRA_MESSAGE, message)
        putExtra(AlarmClock.EXTRA_LENGTH, seconds)
        putExtra(AlarmClock.EXTRA_SKIP_UI, true)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

JAVA

public void startTimer(String message, int seconds) {
    Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_LENGTH, seconds)
            .putExtra(AlarmClock.EXTRA_SKIP_UI, true);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

 

ملاحظه:

لإستدعاء غرض ACTION_SET_TIMER ، يجب أن يكون لدى تطبيقك إذن SET_ALARM

مثال على مرشح الغرض:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_TIMER" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

 

 

 

 

عرض كافة المنبهات

لإظهار قائمة التنبيهات، إستخدم إجراء ACTION_SHOW_ALARMS.

على الرغم من أن العديد من التطبيقات لا تستدعي هذا الغرض (تستخدمه في الأساس تطبيقات النظام)..

فإن أي تطبيق يتصرف كمنبه، يجب أن ينفذ مرشح الغرض هذا، ويستجيب عن طريق عرض قائمة بالمنبهات الحالية.

ملاحظة: تمت إضافة هذا الغرض في أندرويد 4.4 (المستوى 19).

 

الإجراء

ACTION_SHOW_ALARMS

بيانات URI

لا شيء

نوع MIME

لا شيء

مثال على مرشح الغرض:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SHOW_ALARMS" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

 

 

 

 

 

 

الأغراض الشائعه

التقويم


إضافة حدث إلى التقويم

لإضافة حدث جديد إلى تقويم المستخدم، إستخدم الإجراء ACTION_INSERT وحدد عنوان URL البيانات بإستخدام Events.CONTENT_URI.

يمكنك بعد ذلك تحديد تفاصيل الأحداث المختلفة، بإستخدام الإضافات المحددة أدناه.

الإجراء

ACTION_INSERT

بيانات URI

Events.CONTENT_URI

نوع MIME

"vnd.android.cursor.dir/event"

الإضافات

EXTRA_EVENT_ALL_DAY

قيمه منطقيه تحدد ما إذا كان هذا حدثاً على مدار اليوم أم لا.

EXTRA_EVENT_BEGIN_TIME

وقت بدء الحدث (ميلي ثانية منذ الفترة الزمنية).

EXTRA_EVENT_END_TIME

نهاية وقت الحدث (ميلي ثانية منذ الفترة الزمنية).

العنوان

عنوان الحدث.

الوصف

وصف الحدث.

EVENT_LOCATION

موقع الحدث.

EXTRA_EMAIL

قائمة مفصولة بفواصل لعناوين البريد الإلكتروني التي تحدد المدعوين.

يمكن تحديد المزيد من تفاصيل الأحداث بإستخدام الثوابت المحددة في فئة CalendarContract.EventsColumns.

مثال على الغرض:

KOTLIN

fun addEvent(title: String, location: String, begin: Long, end: Long) {
    val intent = Intent(Intent.ACTION_INSERT).apply {
        data = Events.CONTENT_URI
        putExtra(Events.TITLE, title)
        putExtra(Events.EVENT_LOCATION, location)
        putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin)
        putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

JAVA

public void addEvent(String title, String location, long begin, long end) {
    Intent intent = new Intent(Intent.ACTION_INSERT)
            .setData(Events.CONTENT_URI)
            .putExtra(Events.TITLE, title)
            .putExtra(Events.EVENT_LOCATION, location)
            .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin)
            .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

مثال على مرشح الغرض:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.INSERT" />
        <data android:mimeType="vnd.android.cursor.dir/event" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

 

 

 

 

 

 

الأغراض الشائعه

الكاميرا


إلتقاط صورة أو فيديو ثم إعادته

لفتح تطبيق الكاميرا وإستلام الصورة أو الفيديو الناتج، إستخدم الإجراء ACTION_IMAGE_CAPTURE أو ACTION_VIDEO_CAPTURE.

حدد أيضاً موقع URI حيث تريد أن تحفظ الكاميرا، الصورة أو مقطع الفيديو، في الإضافه EXTRA_OUTPUT.

الإجراء

ACTION_IMAGE_CAPTURE أو
ACTION_VIDEO_CAPTURE

مخطط بيانات URI

لا شيء

نوع MIME

لا شيء

الإضافات

EXTRA_OUTPUT

موقع URI حيث يجب أن يقوم تطبيق الكاميرا بحفظ الصورة أو ملف الفيديو (ككائن Uri).

عندما يعيد تطبيق الكاميرا التركيز على نشاطك بنجاح (يتلقى تطبيقك الإستدعاء ()onActivityResult) ..

يمكنك الوصول إلى الصورة أو الفيديو على عنوان URL الذي حددته بالقيمة EXTRA_OUTPUT.

ملاحظة: عند إستخدام ACTION_IMAGE_CAPTURE لإلتقاط صورة، قد تعرض الكاميرا أيضاً نسخة تم تصغيرها (صورة مصغرة) للصورة في نتيجة الغرض..

 يتم حفظها كصورة نقطية في حقل إضافي يسمى “data”.

مثال على الغرض:

KOTLIN

const val REQUEST_IMAGE_CAPTURE = 1
val locationForPhotos: Uri = ...

fun capturePhoto(targetFilename: String) {
    val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
        putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename))
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
        val thumbnail: Bitmap = data.getParcelableExtra("data")
        // Do other work with full size photo saved in locationForPhotos
        ...
    }
}

JAVA

static final int REQUEST_IMAGE_CAPTURE = 1;
static final Uri locationForPhotos;

public void capturePhoto(String targetFilename) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.withAppendedPath(locationForPhotos, targetFilename));
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bitmap thumbnail = data.getParcelableExtra("data");
        // Do other work with full size photo saved in locationForPhotos
        ...
    }
}

 

لمزيد من المعلومات حول كيفية إستخدام هذا الغرض لإلتقاط صورة، بما في ذلك كيفية إنشاء Uri مناسب لموقع الإخراج، اقرأ إلتقاط صورة أو إلتقاط فيديو.

مثال على مرشح الغرض:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

 

عند التعامل مع هذا الغرض، يجب أن يتحقق نشاطك من وجود الإضافه EXTRA_OUTPUT في الغرض الوارد..

ثم حفظ الصورة الملتقطة أو الفيديو، في الموقع المحدد، بواسطة تلك الإضافه، وإستدعاء ()setResult ..

بإستخدام غرض يتضمن صورة مصغّرة مضغوطة، في الإضافه المسماه "data".

 

 

 

 

 

الأغراض الشائعه

بدأ تطبيق الكاميرا في وضع الصور الثابتة
 

إجراءات قوقل الصوتيه
  • “إلتقاط صورة”

لفتح تطبيق الكاميرا في وضع الصور الثابتة، إستخدم الإجراء INTENT_ACTION_STILL_IMAGE_CAMERA.

الإجراء

INTENT_ACTION_STILL_IMAGE_CAMERA

مخطط بيانات URI

لا شيء

نوع MIME

لا شيء

الإضافات

لا شيء

 

 

مثال على الغرض:

KOTLIN

fun capturePhoto() {
    val intent = Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA)
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE)
    }
}

JAVA

public void capturePhoto() {
    Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

مثال على مرشح الغرض:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.STILL_IMAGE_CAMERA" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

 

 

 

 

 

الأغراض الشائعه

بدأ تطبيق الكاميرا في وضع الفيديو
 

إجراءات قوقل الصوتيه
  • “تسجيل فيديو”

لفتح تطبيق الكاميرا في وضع الفيديو، إستخدم الإجراء INTENT_ACTION_VIDEO_CAMERA.

الإجراء

INTENT_ACTION_VIDEO_CAMERA

مخطط بيانات URI

لا شيء

نوع MIME

لا شيء

الإضافات

لا شيء

مثال على الغرض:

KOTLIN

fun capturePhoto() {
    val intent = Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA)
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE)
    }
}

JAVA

public void capturePhoto() {
    Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

مثال على مرشح الغرض:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.VIDEO_CAMERA" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

 

 

 

 

الأصدقاء\ جهات الإتصال


إختيار جهة إتصال

لجعل المستخدم يختار جهة إتصال، ويوفر لتطبيقك الوصول إلى كافة معلومات الإتصال، إستخدم الإجراء ACTION_PICK وحدد نوع MIME إلى Contacts.CONTENT_TYPE.

الغرض النتيجة، الذي تم تسليمه إلى الإستدعاء ()onActivityResult يحتوي على المحتوى: URI يشير إلى جهة الإتصال المحددة.

تمنحك الإستجابة، أذونات مؤقتة لتطبيقك، لقراءة جهة الإتصال تلك، بإستخدام واجهة برمجة التطبيقات..

لموفر جهات الإتصال حتى إذا لم يتضمن تطبيقك على إذن القراءه READ_CONTACTS.

نصيحة: إذا كنت بحاجة إلى الوصول إلى جزء محدد من معلومات الإتصال، مثل رقم الهاتف أو عنوان البريد الإلكتروني..

راجع القسم التالي حول كيفية إختيار بيانات إتصال محددة.

 

الإجراء

ACTION_PICK

مخطط بيانات URI

لا شيء

نوع MIME

Contacts.CONTENT_TYPE

مثال على الغرض:

KOTLIN

const val REQUEST_SELECT_CONTACT = 1

fun selectContact() {
    val intent = Intent(Intent.ACTION_PICK).apply {
        type = ContactsContract.Contacts.CONTENT_TYPE
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_SELECT_CONTACT)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) {
        val contactUri: Uri = data.data
        // Do something with the selected contact at contactUri
        //...
    }
}

JAVA

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
        ...
    }
}

 

للحصول على معلومات حول كيفية إستيراد تفاصيل جهة الإتصال، بمجرد أن يكون لديك عنوان URI للإتصال، اقرأ تفاصيل الإستيراد لجهة الإتصال.

تذكر أنه عندما تقوم بإستيراد عنوان URI لجهة إتصال بإستخدام الغرض المذكور أعلاه، فإنك لا تحتاج إلى..

إذن القراءة READ_CONTACTS لقراءة التفاصيل الخاصة بجهة الإتصال تلك.

 

 

 

 

إختيار بيانات محددة لجهة الإتصال

 

لكي يقوم المستخدم بتحديد، جزء محدد من معلومات جهة الإتصال، مثل رقم الهاتف أو عنوان البريد الإلكتروني أو نوع بيانات آخر..

إستخدم الإجراء ACTION_PICK وحدد نوع MIME إلى أحد أنواع المحتوى المدرجة أدناه..

مثل CommonDataKinds.Phone.CONTENT_TYPE للحصول على رقم هاتف جهة الإتصال.

إذا كنت ترغب في إستيراد نوع واحد فقط من البيانات من جهة الإتصال، فإن هذه التقنية بإستخدام CONTENT_TYPE ..

من فئات ContactsContract.CommonDataKinds ستكون أكثر كفاءة من إستخدام Contacts.CONTENT_TYPE

(كما هو موضح في القسم السابق) لأن النتيجة توفر لك وصولاً مباشراً، للبيانات المطلوبة دون مطالبتك بتنفيذ إستعلام أكثر تعقيداً، لموفر جهات الإتصال.

نتيجة الغرض التي تم تسليمها إلى الإستدعاء ()onActivityResult الخاص بك، تحتوي على المحتوى: URI للإشارة إلى البيانات المحددة لجهة الإتصال.

تمنحك الإستجابة، أذونات مؤقتة لتطبيقك لقراءة بيانات جهة الإتصال، حتى إذا لم يحتوي تطبيقك على إذن READ_CONTACTS.

 

الإجراء

ACTION_PICK

مخطط بيانات URI

لا شيء

نوع MIME

CommonDataKinds.Phone.CONTENT_TYPE

للإختيار من جهات الإتصال بإستخدام رقم هاتف.

CommonDataKinds.Email.CONTENT_TYPE

للإختيار من جهات الإتصال بإستخدام عنوان بريد إلكتروني.

CommonDataKinds.StructuredPostal.CONTENT_TYPE

للإختيار من جهات الإتصال بإستخدام العنوان البريدي.

أو واحد من قيم CONTENT_TYPE المتعددة الأخرى، ضمن ContactsContract.

مثال على الغرض:

KOTLIN

const val REQUEST_SELECT_PHONE_NUMBER = 1

fun selectContact() {
    // Start an activity for the user to pick a phone number from contacts
    val intent = Intent(Intent.ACTION_PICK).apply {
        type = CommonDataKinds.Phone.CONTENT_TYPE
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == Activity.RESULT_OK) {
        // Get the URI and query the content provider for the phone number
        val contactUri: Uri = data.data
        val projection: Array<String> = arrayOf(CommonDataKinds.Phone.NUMBER)
        contentResolver.query(contactUri, projection, null, null, null).use { cursor ->
            // If the cursor returned is valid, get the phone number
            if (cursor.moveToFirst()) {
                val numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER)
                val number = cursor.getString(numberIndex)
                // Do something with the phone number
                ...
            }
        }
    }
}

JAVA

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
            //...
        }
    }
}

 

 

 

 

عرض جهة الإتصال

لعرض تفاصيل جهة إتصال معروفة، إستخدم الإجراء ACTION_VIEW وحدد جهة الإتصال بإستخدام content: URIكبيانات الغرض.

هناك طريقتان رئيسيتان لإستيراد عنوان URI الخاص بجهة الإتصال بشكلٍ مبدئي:

  • إستخدم عنوان URI لجهة الإتصال، الذي تم إرجاعه بواسطة ACTION_PICK، كما هو موضح في القسم السابق (لا يتطلب هذا الأسلوب أي أذونات تطبيق).

 

  • قم بالوصول إلى القائمة، التي تحتوي على كافة جهات الإتصال مباشرة، كما هو موضح في إستيراد قائمة جهات الإتصال (يتطلب هذا الأسلوب الحصول على إذن READ_CONTACTS).

الإجراء

ACTION_VIEW

مخطط بيانات URI

<content:<URI

نوع MIME

لا شيء. يتم الإستدلال على النوع، من عنوان URI الخاص بجهة الإتصال.

مثال على الغرض:

KOTLIN

fun viewContact(contactUri: Uri) {
    val intent = Intent(Intent.ACTION_VIEW, contactUri)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

JAVA

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

 

 

 

تحرير جهة إتصال موجودة

لتحرير جهة إتصال معروفه، إستخدم الإجراء ACTION_EDIT، وحدد جهة الإتصال بإستخدام content: URI كبيانات للغرض..

وقم بتضمين أي معلومات إتصال معروفة، في الإضافات المحددة بواسطة الثوابت في ContactsContract.Intents.Insert.

هناك طريقتان أساسيتان لإستيراد عنوان URI لجهة إتصال:

إستخدم عنوان URI لجهة الإتصال، الذي تم إرجاعه بواسطة ACTION_PICK، كما هو موضح في القسم السابق (لا يتطلب هذا الأسلوب أي أذونات تطبيق).

قم بالوصول إلى القائمة، التي تحتوي على كافة جهات الإتصال مباشرة، كما هو موضح في إستيراد قائمة جهات الإتصال (يتطلب هذا الأسلوب الحصول على إذن READ_CONTACTS).

 

الإجراء

ACTION_EDIT

مخطط بيانات URI

<content:<URI

نوع MIME

يتم الإستدلال على النوع، من عنوان URI لجهة الإتصال.

الإضافات

واحد أو أكثر من الإضافات المحددة في ContactsContract.Intents.Insert لتتمكن من ملء حقول التفاصيل، الخاصة بجهة الإتصال.

مثال على الغرض:

KOTLIN

fun editContact(contactUri: Uri, email: String) {
    val intent = Intent(Intent.ACTION_EDIT).apply {
        data = contactUri
        putExtra(ContactsContract.Intents.Insert.EMAIL, email)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

JAVA

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);
    }
}

 

لمزيد من المعلومات حول كيفية تحرير جهة الإتصال، اقرأ تعديل جهات الإتصال بإستخدام الأغراض ” الغرض “.

 

 

 

 

 

 

الأغراض الشائعه

إدخال جهة إتصال

لإدراج جهة إتصال جديدة، إستخدم الإجراء ACTION_INSERT وحدد جهات الإتصال Contacts.CONTENT_TYPE  كنوع MIME..

وقم بتضمين أي معلومات إتصال معروفة، في الإضافات المحددة بواسطة الثوابت في ContactsContract.Intents.Insert.

 

الإجراء

ACTION_INSERT

مخطط بيانات URI

لا شيء

نوع MIME

Contacts.CONTENT_TYPE

الإضافات

واحد أو أكثر من الإضافات المعرفة في ContactsContract.Intents.Insert.

مثال على الغرض:

KOTLIN

fun insertContact(name: String, email: String) {
    val intent = Intent(Intent.ACTION_INSERT).apply {
        type = ContactsContract.Contacts.CONTENT_TYPE
        putExtra(ContactsContract.Intents.Insert.NAME, name)
        putExtra(ContactsContract.Intents.Insert.EMAIL, email)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

JAVA

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);
    }
}

 

لمزيد من المعلومات حول كيفية إدراج جهة الإتصال، اقرأ تعديل جهات الإتصال بإستخدام الأغراض ” الغرض “.

 

راجع أيضاً:

الأغراض الشائعه 2


للإطلاع على المقال باللغه الإنجليزيه أضغط هنا.

الإعلانات