القيود المفروضة على بدء الأنشطة من الخلفية

نظام Android 10 (المستوى 29 من واجهة برمجة التطبيقات) وقيود أعلى تحدّد وقت بدء التطبيقات الأنشطة عند تشغيل التطبيق في الخلفية. تساعد هذه القيود في تقليل الانقطاعات للمستخدم تجعل المستخدم أكثر تحكمًا في ما يظهر على الشاشة.

يقدِّم هذا الدليل الإشعارات كبديل لبدء الأنشطة من الخلفية. كما يسرد أيضًا الحالات المحددة التي لا يتم فيها تطبيقها.

عرض الإشعارات بدلاً من ذلك

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

يوفر نظام التنبيهات والتذكيرات المستند إلى الإشعارات العديد من المزايا للمستخدمين:

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

الوقت الذي تتيح فيه التطبيقات بدء الأنشطة

يمكن للتطبيقات التي تعمل بنظام التشغيل Android 10 أو الإصدارات الأحدث بدء الأنشطة عند استيفاء شرط واحد أو أكثر من الشروط التالية:

  • يحتوي التطبيق على نافذة مرئية، مثل نشاط في المقدّمة.
  • يحتوي التطبيق على نشاط في الحزمة الخلفية مهمة تعمل في المقدّمة.
  • يحتوي التطبيق على نشاط في الحزمة الخلفية لمهمة حالية في شاشة الأماكن الأخيرة

  • يحتوي التطبيق على نشاط بدأ منذ فترة قريبة جدًا.

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

  • يتضمّن التطبيق إحدى الخدمات التالية المرتبطة بالنظام. هذه الخدمات إلى تشغيل واجهة مستخدم.

  • يتضمّن التطبيق خدمة مرتبطة بتطبيق مرئي مختلف. التطبيق يجب أن يظل المرتبط بالخدمة مرئيًا للتطبيق في الخلفية بدء الأنشطة بنجاح.

  • يتلقّى التطبيق إشعارًا PendingIntent من النظام. ضِمن حالة الأهداف المعلّقة للخدمات وأجهزة استقبال البث يتمكن من بدء الأنشطة لبضع ثوانٍ بعد إرسال الطلب الذي كان في انتظار المراجعة.

  • يتلقّى التطبيق رسالة "PendingIntent" يتم إرسالها من نوع مختلف ومرئي. التطبيق.

  • يتلقّى التطبيق بثًا للنظام حيث من المتوقّع أن يطلق التطبيق واجهة مستخدم تشمل الأمثلة ACTION_NEW_OUTGOING_CALL SECRET_CODE_ACTION. يمكن للتطبيق بدء الأنشطة لبضع ثوانٍ بعد إرسال البث.

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

  • التطبيق عبارة عن وحدة تحكّم بسياسة الجهاز يتم تشغيله في وضع مالك الجهاز. تشمل أمثلة حالات الاستخدام أجهزة المؤسسات المُدارة بالكامل بالإضافة إلى الأجهزة المخصصة مثل الأجهزة الرقمية واللافتات والأكشاك.

  • تم منح التطبيق إذن SYSTEM_ALERT_WINDOW من قِبل المستخدم.

يجب الموافقة عند بدء الأنشطة من رموز PendingIntent

لتجنُّب السماح ببدء النشاط غير المقصود استنادًا إلى القائمة الشروط، بدءًا من الإصدار Android 14، هناك واجهات برمجة تطبيقات صريحة تتيح لك الموافقة على منح أذونات التطبيق لميزة "بدء النشاط" أو عدم الموافقة عليها.

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

جدول الأهداف في انتظار المراجعة
الشكل 1: مسار اتّخاذ القرار بشأن إطلاق الأنشطة في الخلفية

من قِبل مُرسِل رمز PendingIntent

على التطبيقات التي تستهدف الإصدار 14 من نظام التشغيل Android أو الإصدارات الأحدث وتريد تفعيل PendingIntent

  • استيفاء الشروط المذكورة و
  • الموافقة على السماح ببدء النشاط في الخلفية استنادًا إلى هذه الاستثناءات

ينبغي أن يحدث هذا التمكين فقط إذا كان مطوّر التطبيق يعلم أن التطبيق لبدء نشاط.

للموافقة، يجب أن يمرّر التطبيق حزمة "ActivityOptions" مع setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) إلى PendingIntent.send() أو بالطرق المشابهة.

منشئ رمز PendingIntent

يجب الآن على التطبيقات التي تستهدف الإصدار 15 من نظام التشغيل Android أو الإصدارات الأحدث إنشاء PendingIntent الموافقة بشكل صريح على السماح ببدء النشاط في الخلفية إذا أرادوا ذلك PendingIntents أن يكون قابلاً للتشغيل بموجب الشروط المُدرَجة.

في معظم الحالات، يجب أن يكون التطبيق الذي يبدأ في PendingIntent هو التطبيق الذي يتم تفعيله. ومع ذلك، إذا كان تطبيق الإنشاء بحاجة إلى منح هذه الامتيازات:

  • يمكن بدء PendingIntent في أي وقت يكون فيه تطبيق الإنشاء مرئيًا.
  • يمكن بدء PendingIntent في أي وقت إذا كان تطبيق الإنشاء يتضمّن ميزات خاصة الامتيازات.

للموافقة، يجب أن يمرّر التطبيق حزمة "ActivityOptions" مع setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) إلى PendingIntent.getActivity() أو طرق مشابهة.

لمزيد من التفاصيل، يمكنك قراءة المستندات المرجعية ذات الصلة: