سؤال

أنا مبتدئ في Android. قرأت وثائق Android ولكني ما زلت بحاجة إلى مزيد من التوضيح. هل يمكن لأي شخص أن يخبرني ما هو بالضبط PendingIntent هو؟

هل كانت مفيدة؟

المحلول

أ PendingIntent هو الرمز المميز الذي تقدمه لتطبيق أجنبي (على سبيل المثال NotificationManager, AlarmManager, ، الشاشة الرئيسية AppWidgetManager, أو غيرها من طلبات الطرف الثالث) ، والتي يسمح للتطبيق الأجنبي باستخدام أذونات التطبيق لتنفيذ قطعة رمز محددة مسبقًا.

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

نصائح أخرى

نوايا

تعتبر الأجزاء هي آلية المراسلة القياسية في Android التي تعبر عن نية المستخدم في القيام ببعض الأعمال. إنها تتيح لك التفاعل مع المكونات الأخرى المحددة من قبلك أو بواسطة نظام التشغيل Android.

مثال:

  1. بث رسالة
  2. ابدأ الكاميرا
  3. ابدأ خدمة
  4. إطلاق نشاط
  5. عرض صفحة ويب أو قائمة جهات الاتصال
  6. اطلب رقم هاتف أو أجب على مكالمة هاتفية

    يتم استخدامها في كلا الاتجاهين

1) بواسطتك للاتصال بمكون

2) من قبل النظام لإعلامك ببعض الأحداث.

عادة ما يلي سير العمل المنطقي لإنشاء نية على النحو التالي:

  • إنشاء القصد
  • ب. إضافة خيارات النية-> السابق. ما نوع النية التي نرسلها إلى نظام التشغيل أو أي سمات مرتبطة بهذه النية ، مثل سلسلة نصية أو شيء يتم تمريره مع القصد
  • ج. تشغيل القصد

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

معلق

أ PendingIntent يحدد إجراء لاتخاذ في المستقبل. يتيح لك تمرير نية مستقبلية لتطبيق آخر والسماح لهذا التطبيق بتنفيذ هذا النية كما لو كان لديه same permissions as your application, ، سواء كان تطبيقك لا يزال موجودًا عند استدعاء القصد في النهاية. من الرمز المميز الذي تقدمه إلى تطبيق أجنبي يسمح للتطبيق الأجنبي باستخدام أذونات التطبيق لتنفيذ جزء من التعليمات البرمجية المحددة مسبقًا.

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

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

استمرارًا من مثال الحياة الواقعية: دعنا نقول أنني أريد الاستحمام ولكني أريد الاستحمام بعد تنظيف أسناني وتناول وجبة الإفطار. لذلك أعلم أنني لن أتحول لمدة 30-40 دقيقة على الأقل. لا يزال لديّ في رأسي أنني بحاجة إلى إعداد ملابسي ، ثم السير على الدرج إلى الحمام ، ثم خلع ملابسه ثم الاستحمام. ومع ذلك ، لن يحدث هذا إلا بعد 30-40 دقيقة. الآن لدي نية معلقة للاستحمام. إنه معلق لمدة 30-40 دقيقة.

هذا هو الفرق إلى حد كبير بين نية معلقة وقصد منتظم. بالمختصر:

نية منتظمة -> DOES NOT REQUIRE PENDING INTENT TO BE MADE

نية معلقة -> REQUIRES A REGULAR INTENT TO BE CREATED

النوايا من نوعين- صريح و ضمني

نية صريحة: عندما يكون تطبيقك على دراية بالمكون الذي يجب الاتصال به لأداء بعض الإجراءات

نية ضمنية: عندما لا يكون التطبيق الخاص بك على دراية بالمكون الذي يمكنه إجراء الإجراء المطلوب تمامًا. بالنسبة لـ EX ، إذا قلت ببساطة أنك تريد عرض عنوان URL ، فإن النظام يقرر المكون الذي سيحقق النية.

للحصول على فكرة أفضل وواضحة عن النوايا. VIST أدناه الروابط

  1. slidenerd.com
  2. أندرويد نية البرنامج التعليمي
  3. اكثر

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

أعتقد أن الوثائق مفصلة بما فيه الكفاية:مستندات نية معلقة.

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

في حالتي ، لا يوجد أي من الإجابات أعلاه ولا الوثائق الرسمية لـ Google ساعدني في الحصول على مفهوم PendingIntent صف دراسي.

ثم وجدت هذا الفيديو ، Google I/O 2013 ، ما وراء النقطة الزرقاء جلسة. في هذا الفيديو ، يشرح Googler Jaikumar Ganesh السابق ماذا PendingIntent هو ، وكان هذا هو الشيء الذي أعطاني الصورة الكبيرة لهذا.

فيما يلي مجرد نسخ للفيديو أعلاه (من 15:24).

إذن ما هي النية المعلقة؟

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

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

PendingIntent mIntent = PendingIntent.getService(...);

mLocationClient.requestLocationUpdates(locationRequest, mIntent);

public void onHandleIntent(Intent intent) {   
    String action = intent.getAction();   
    if (ACTION_LOCATION.equals(action)) {       
        Location location = intent.getParcelableExtra(...)   
    }
}

لماذا المعلق مطلوب؟ كنت أفكر مثل

  1. لماذا لا يمكن للتطبيق المستلم نفسه إنشاء ملف Intent أو
  2. لماذا لا يمكننا استخدام بسيطة Intent لنفس الغرض.

على سبيل المثالIntent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

إذا أرسلت bluetoothIntent لتطبيق آخر ، لا يحتوي على إذن android.permission.BLUETOOTH_ADMIN, ، لا يمكن لهذا التطبيق الاستلام تمكين البلوتوث مع startActivity(bluetoothIntent).

يتم التغلب على القيد باستخدام PendingIntent. مع PendingIntent تطبيق الاستلام ، لا يجب أن يكون لديك android.permission.BLUETOOTH_ADMIN لتمكين البلوتوث. مصدر.

القصد المعلق هو نية ستبدأ في وقت ما في المستقبل. تبدأ النية العادية على الفور عندما يتم تمريرها startActivity(Intent) أو StartService(Intent).

نية مستقبلية يمكن أن تستخدمها التطبيقات الأخرى.
وهنا مثال لإنشاء واحدة:

Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, 0);

تشبيه التاكسي

نية

عادة ما تستخدم النوايا لخدمات البدء. علي سبيل المثال:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
startService(intent);

هذا مثل عندما تتصل بسيارة أجرة:

Myself = CurrentClass
Taxi Driver = ServiceClass

نية معلقة

ستحتاج إلى استخدام شيء مثل هذا:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
PendingIntent pi = PendingIntent.getService(parameter, parameter, intent, parameter);
getDataFromThirdParty(parameter, parameter, pi, parameter);

الآن سيبدأ هذا الطرف الثالث الخدمة التي تتصرف نيابة عنك. تشبيه الحياة الحقيقية هو أوبر أو ليفت وكلاهما من شركات سيارات الأجرة.

ترسل طلبًا لركوب إلى Uber/Lyft. سوف يمضي قدمًا ويتصلون بأحد سائقيهم نيابة عنك.

لذلك:

Uber/Lyft ------ ThirdParty which receives PendingIntent
Myself --------- Class calling PendingIntent
Taxi Driver ---- ServiceClass

A PendingIntent هو رمز تقدمه لتطبيق آخر (مثل مدير الإخطار أو مدير الإنذار أو تطبيقات الطرف الثالث الآخر) ، والذي يسمح لهذا التطبيق الآخر باستخدام أذونات التطبيق الخاص بك لتنفيذ قطعة رمز محددة مسبقًا. لأداء بث من خلال نية معلقة ، احصل على معلقة عبر PenderIntent.getBroadcast (). لتنفيذ نشاط من خلال نية معلقة ، تتلقى النشاط عبر PenderIntent.getActivity ().

ما هي النية؟

القصد هو أمر محدد في Android يتيح لك إرسال أمر إلى نظام التشغيل Android للقيام بشيء محدد. فكر في الأمر كإجراء يجب أن يحدث. هناك العديد من الإجراءات التي يمكن القيام بها مثل إرسال بريد إلكتروني ، أو إرفاق صورة بالبريد الإلكتروني أو حتى إطلاق تطبيق. عادة ما يكون سير العمل المنطقي لإنشاء نية على النحو التالي: إنشاء النية ب. إضافة خيارات النوايا -> السابقين. ما هو نوع النية التي نرسلها إلى نظام التشغيل أو أي سمات مرتبطة بهذه النية ، مثل سلسلة نصية أو شيء يتم تمريره مع القصد C. تشغيل القصد

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

ما هي النوايا المعلقة؟

استمرارًا من مثال الحياة الحقيقية ، دعنا نقول أنني أريد الاستحمام ولكني أريد الاستحمام بعد تنظيف أسناني وتناول وجبة الإفطار. لذلك أعلم أنني لن أتحول حتى 30-40 دقيقة على الأقل. لا يزال لديّ في رأسي أنني بحاجة إلى إعداد ملابسي ، ثم السير على الدرج إلى الحمام ، ثم خلع ملابسه ثم الاستحمام. ومع ذلك ، لن يحدث هذا حتى تم مرور 30-40 دقيقة. لدي الآن نية معلقة للاستحمام. إنه معلق لمدة 30-40 دقيقة.

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

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

 PendingIntent aPendingIntent = PendingIntent.getService(Context, 0, aIntent,
                    PendingIntent.FLAG_CANCEL_CURRENT);

بلغة سهلة ،
1. وصف للقصد والعمل المستهدف لأداء. أولاً ، يجب عليك إنشاء نية ثم عليك تمرير فئة Java محددة تريد تنفيذها ، إلى النية.
2. يمكنك استدعاء فئة Java هذه التي هي فئة الإجراءات الصفية الخاصة بك عن طريق PenderIntent.getActivity ، pendingIntent.getActivities (السياق ، int ، intent [] ، int) ، pendingIntent.getBroadcast (السياق ، int ، int ، int) ، ومعلق. getService (السياق ، int ، نية ، int) ؛ هنا ترى تلك النية التي تأتي من الخطوة 1
3. يجب أن تضع في اعتبارك ذلك ... من خلال إعطاء عرض معلق لتطبيق آخر ، فأنت تمنحه الحق في إجراء العملية التي حددتها.

هذا ما تعلمته بعد قراءة طويلة.

يلتف المعلق المعلق النية العامة مع رمز رمز تقدمه للتطبيق الأجنبي لتنفيذه بإذنك. على سبيل المثال:

لا يمكن للإشعار بتطبيق الموسيقى تشغيل/إيقاف الموسيقى إذا لم تعطي PendingIntent لإرسال البث لأن تطبيق الموسيقى الخاص بك لديه READ_EXTERNAL_STORAGE إذن لا يوجد تطبيق للإخطار. الإخطار هو خدمة النظام (لذلك هو تطبيق أجنبي).

كما يوحي اسمها .. معلقة

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

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

من الرمز المميز الذي تقدمه إلى تطبيق أجنبي يسمح للتطبيق الأجنبي باستخدام أذونات التطبيق لتنفيذ جزء من التعليمات البرمجية المحددة مسبقًا.

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

لأداء بث من خلال نية معلقة ، احصل على معلقة عبر PenderIntent.getBroadcast (). لتنفيذ نشاط من خلال نية معلقة ، تتلقى النشاط عبر PenderIntent.getActivity ().

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

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

يوفر A BendingIntent وسيلة للتطبيقات للعمل ، حتى بعد خروج العملية. من المهم أن نلاحظ أنه حتى بعد أن تم قتل التطبيق الذي أنشأ المعاناة ، لا يزال بإمكان هذا النية تشغيل. وصف للقصد والعمل المستهدف لأداء معها. يتم إنشاء مثيلات من هذه الفئة مع GetActivity (السياق ، int ، int ، int) ، getBroadcast (السياق ، int ، int ، int) ، getService (السياق ، int ، int ، int) ؛ يمكن تسليم الكائن الذي تم إرجاعه إلى تطبيقات أخرى حتى يتمكنوا من تنفيذ الإجراء الذي وصفته نيابة عنك في وقت لاحق.

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

إن المعلقة نفسها هي ببساطة إشارة إلى رمز مميز يحتفظ به النظام الذي يصف البيانات الأصلية المستخدمة لاستردادها. هذا يعني أنه حتى إذا قتلت عملية طلبها ، فستظل المعلقة نفسها قابلة للاستخدام من العمليات الأخرى التي تم منحها. إذا أعاد تطبيق إنشاء Retriereirey نفس النوع من المعلق (نفس العملية ، ونفس الإجراءات النية ، والبيانات ، والفئات ، والمكونات ، ونفس الأعلام) ، فسوف يتلقى معلقة تمثل الرمز المميز نفسه إذا كان ذلك لا يزال صالحًا ، ويمكنه يمكنه وبالتالي استدعاء إلغاء () لإزالته.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top