يعمل Android O على كسر التطبيقات التي تتراكب أعلى شريط الحالة

يوقف Android O TYPE_SYSTEM_OVERLAY لصالح TYPE_APPLICATION_OVERLAY، مما يؤدي إلى كسر التطبيقات التي تتراكب أعلى شريط الحالة.

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


Android O يكسر تراكبات شريط الحالة

أحد الأشياء المفضلة لدي في Android هو مدى قابليته للتخصيص. يمكن للمستخدمين الذين تم تجذيرهم أو تشغيل ROM مخصصة أن يقوموا بوضع أشرطة حالة النظام الخاصة بهم بشكل أصلي دون أي قيود، ولكن إذا كان جهازك بدون جذر، فلديك خيارات أقل متاحة لك. لحسن الحظ، هناك العديد من التطبيقات على متجر Google Play التي تسمح لك بتغيير شكل شريط الحالة على المستوى الأساسي. أصبح هذا ممكنًا بفضل مجموعة ذكية من System Overlay Windows لعرض شريط الحالة المخصص فوق الشريط الموجود، مستمعي الإشعارات لعرض الإشعارات، بالإضافة إلى خدمة إمكانية الوصول بشكل اختياري للسماح بتلوين المحتوى المخصص حسب السياق شريط الحالة.

تُظهر لقطتا الشاشة أعلاه كيف سيبدو شريط الإشعارات عند استخدام أحد تطبيقات تراكب شريط الحالة العديدة المتوفرة على متجر Play. تم التقاط لقطات الشاشة هذه على هاتف Huawei Mate 9 الذي يعمل بنظام EMUI 5.0. بالنسبة لأولئك منكم الذين ليسوا على دراية بنظام EMUI، فإن شريط الحالة لا يبدو مثل لقطات الشاشة المذكورة أعلاه. بدلا من ذلك، يبدو مثل هذا:

إذا كنت لا تمانع في ظهور شريط حالة المخزون الخاص بك، فإن التطبيقات مثل حالة أو شريط حالة المواد هي هبة من السماء. ولكن إذا، أو عندما يقوم جهازك بالتحديث إلى Android O، فقد لا تعمل هذه التطبيقات بعد الآن. إليك ما يبدو عليه نفس هذين التطبيقين على Google Pixel الذي يقوم بتشغيل Android O Developer Preview:

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

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

فيما يلي قائمة ببعض التطبيقات الشائعة التي قد تصبح عديمة الفائدة:

  • حالة (500,000 - 1,000,000 عملية تثبيت)
  • شريط حالة المواد (1,000,000 - 5,000,000 عملية تثبيت)
  • أداة رائعة - إحصائيات النظام (500,000 - 1,000,000 عملية تثبيت)
  • الاتصالات السلكية واللاسلكية (50,000 - 100,000 عملية تثبيت)
  • تنظيف شريط الحالة (100,000 - 500,000 عملية تثبيت)
  • تاينيكور (100,000 - 500,000 عملية تثبيت)

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

  • الشفق (5,000,000 - 10,000,000 عملية تثبيت)
  • انتباه (100,000 - 500,000 عملية تثبيت)
  • مراقبة الموارد البسيطة (50,000 - 100,000 عملية تثبيت)
  • مراقب الشبكة ميني (1,000,000 - 5,000,000 عملية تثبيت)

هناك العديد من التطبيقات على متجر Play التي تستخدم نوعًا من التراكب أعلى شريط الحالة، ولكن يمكنك بالفعل معرفة أن مثل هذا التغيير سيؤثر على العديد من التطبيقات التي قد يستخدمها الملايين المستخدمين. إذن ما الذي يحدث هنا؟


تم إهمال TYPE_SYSTEM_OVERLAY

مع كل إصدار جديد لنظام Android، تقدم Google ميزات متنوعة وتتجاهلها (تصنفها على أنها قديمة وستتم إزالتها). هذه المرة، الميزة الموجودة على قالب التقطيع هي TYPE_SYSTEM_OVERLAY. على حد تعبير الصفحه المرجعيه لما قدمته هذه الميزة للمطورين:

TYPE_SYSTEM_OVERLAY

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

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

TYPE_APPLICATION_OVERLAY

نوع النافذة: يتم عرض نوافذ تراكب التطبيقات أعلى جميع نوافذ الأنشطة (الأنواع بين FIRST_APPLICATION_WINDOW و LAST_APPLICATION_WINDOW) ولكن أسفل نوافذ النظام المهمة مثل شريط الحالة أو محرر أسلوب الإدخال (IME).

قد يقوم النظام بتغيير موضع هذه النوافذ أو حجمها أو إمكانية رؤيتها في أي وقت لتقليل الفوضى المرئية للمستخدم وإدارة الموارد أيضًا.

سيقوم النظام بضبط أهمية العمليات باستخدام هذا النوع من النوافذ لتقليل فرصة قتلهم بواسطة قاتل الذاكرة المنخفضة.

في الأنظمة متعددة المستخدمين يظهر فقط على شاشة المستخدم المالك.

كما ترون، يسمح هذا النوع الجديد من النوافذ للتطبيقات بتراكب المحتوى فوق جميع نوافذ الأنشطة الأخرى يستثني "نوافذ النظام الهامة مثل شريط الحالة أو IME" (يشير IME إلى لوحة المفاتيح). يعد هذا أمرًا جيدًا بالنسبة لتطبيقات مثل Facebook Messenger، نظرًا لأن رؤوس الدردشة التي يوفرها هذا التطبيق ليس لها أي غرض للجلوس أعلى شريط الحالة، ولكن هذا يؤثر سلبًا على معظم التطبيقات التي ذكرتها سابقًا.

علاوة على ذلك، لا يبدو أن هناك حل بديل يمكن للمطورين استخدامه في الوقت الحالي. قد يتوقع المرء أنه من أجل تجنب هذه المشكلة على Android O، يقوم المطورون ببساطة ببناء تطبيقاتهم لاستهداف SDK 25 (Android 7.1.1). ومع ذلك، كما أشار مطور الحالة على Redditجوجل لديها استبدال TYPE_SYSTEM_OVERLAY مع TYPE_APPLICATION_OVERLAY، والتغيير هو مستقلة عن SDK الهدف إصدار. يتعين على المطورين الذين يستخدمون TYPE_SYSTEM_OVERLAY حاليًا استخدام TYPE_APPLICATION_OVERLAY للحفاظ على التوافق، وبالتالي، بغض النظر عن إصدار SDK المستهدف الذي يعتمد عليه تطبيق معين، يمكنه ذلك لم تعد تستخدم TYPE_SYSTEM_OVERLAY على Android O.


ما الذى يمكن فعله حيال ذلك؟

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

قام المطورون الذين يستخدمون هذه الميزة بفتح تقارير الأخطاء على أداة تعقب المشكلات في Android (#260787 و #36574245) للاحتجاج على التغيير والمطالبة بواجهة برمجة تطبيقات بديلة، ولكن علق أحد موظفي Google على أداة التتبع باستخدام عبارة الجملة التالية:

الحالة: لن يتم الإصلاح (السلوك المقصود)

لقد تابعنا مع فريق المنتج والهندسة وحصلنا على اقتراح بأن المطورين يمكنهم استخدام أنشطة SHOW_WHEN_LOCKED من أجل تظهر عندما يكون الجهاز مقفلاً، ولكن لم يعد من الممكن عرضه على شاشة القفل / فوق مركز الإشعارات عمدًا

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

ونظرًا لأن هذه مجرد أول معاينة للمطورين لنظام التشغيل Android O، فلا يزال من الممكن لشركة Google تغيير إعداداتها العقول وتوفير هذه الوظيفة للتطبيقات التي لا تستهدف Android O، أو لـ Google لاستعادتها TYPE_SYSTEM_OVERLAY. ولكن إذا ظلت الأمور على ما هي عليه الآن، فيمكنك القيام بذلك قبلة وداعا لهذه التطبيقات. وسيكون ذلك عارًا.


شكرًا لـ Eli Irvin على اختبار العديد من هذه التطبيقات لي!