يتم تضمين ميزات واجهة برمجة التطبيقات لتحسين التعامل مع الأخطاء في ميزة "نظرة سريعة" بدءًا من الإصدار 15 من نظام التشغيل Android توفّر هذه الصفحة بعض أفضل الممارسات بشأن واجهات برمجة التطبيقات هذه.
استخدام كتلة تجريبية حول المكوّنات غير القابلة للإنشاء
لا تسمح ميزة الإنشاء بدمج عناصر تجريبية، ولكنها تتيح لك التفاف العناصر. منطق تطبيقك الآخر في هذه الأقسام. يتيح لك هذا استخدام ComposeAllowed كما هو موضح في المثال التالي:
provideContent {
var isError = false;
var data = null
try {
val repository = (context.applicationContext as MyApplication).myRepository
data = repository.loadData()
} catch (e: Exception) {
isError = true;
//handleError
}
if (isError) {
ErrorView()
} else {
Content(data)
}
}
التنسيق التلقائي للأخطاء
إذا كان هناك استثناء غير معروف أو خطأ في الإنشاء، تعرض ميزة "نظرة سريعة" التخطيط الافتراضي للأخطاء:
![رسالة خطأ تعرض نوع الخطأ واقتراح مكان حدوثه
أن أبحث عنها](https://developer.android.com/static/partners/glance/images/default_error_layout.png?authuser=9&hl=ar)
![مربّع يحتوي على النص "يتعذّر عرض المحتوى"](https://developer.android.com/static/partners/glance/images/new_error_layout.png?authuser=9&hl=ar)
تتيح ميزة "نظرة سريعة" للمطوّرين توفير تنسيق XML كتنسيق احتياطي في حال تركيب فشل. وهذا يعني أن هناك خطأ في رمز الإنشاء. واجهة مستخدم الخطأ هذه أيضًا في حال حدوث خطأ غير معروف في رمز تطبيقك.
class UpgradeWidget : GlanceAppWidget(errorUiLayout = R.layout.error_layout)
هذا التخطيط هو تخطيط ثابت لا يمكن للمستخدم التفاعل معه، ولكنه جيد في حالات الطوارئ.
![يحتوي على عنوان وحقل نصي لعرض رسالة خطأ](https://developer.android.com/static/partners/glance/images/custom_error_layout.png?authuser=9&hl=ar)
إضافة إجراءات إلى واجهة مستخدم الخطأ التلقائية
في الإصدار 1.1.0 من "نظرة سريعة"، تتيح لك ميزة "نظرة سريعة" إلغاء رمز معالجة الأخطاء التلقائي. بهذه الطريقة، يمكنك إضافة استدعاءات الإجراءات في حالة حدوث استثناء غير معروف أو خطأ في التركيب.
لاستخدام هذه الميزة، عليك إلغاء الدالة onCompositionError()
:
GlanceAppWidget.onCompositionError(
context: Context,
glanceId: GlanceId,
AppWidgetId: Int,
throwable: Throwable
)
وفي هذه الوظيفة، تستخدم ميزة "نظرة سريعة" واجهة برمجة تطبيقات RemoteViews
لمعالجة الأخطاء.
يتيح لك هذا تحديد التنسيقات ومعالجات الإجراءات باستخدام XML.
توضح لك الأمثلة التالية، خطوة بخطوة، كيفية إنشاء واجهة مستخدم للخطأ يتضمن زرًا لإرسال الملاحظات:
- كتابة ملف error_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/Widget.MyApplication.AppWidget.Error"
android:id="@android:id/background"
android:layout_width="match_parent"
android:textSize="24sp"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/error_title_view"
android:layout_width="match_parent"
android:textColor="@color/white"
android:textFontWeight="800"
android:layout_height="wrap_content"
android:text="Example Widget Error" />
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:paddingTop="4dp"
android:layout_height="match_parent">
<ImageButton
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_gravity="center"
android:tint="@color/white"
android:id="@+id/error_icon"
android:src="@drawable/heart_broken_fill0_wght400_grad0_opsz24"
/>
<TextView
android:id="@+id/error_text_view"
android:layout_width="wrap_content"
android:textColor="@color/white"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="8dp"
android:textSize="16sp"
android:layout_weight="1"
android:text="Useful Error Message!" />
</LinearLayout>
</LinearLayout>
- إلغاء الدالة
onCompositionError
override fun onCompositionError(
context: Context,
glanceId: GlanceId,
AppWidgetId: Int,
throwable: Throwable
) {
val rv = RemoteViews(context.packageName, R.layout.error_layout)
rv.setTextViewText(
R.id.error_text_view,
"Error was thrown. \nThis is a custom view \nError Message: `${throwable.message}`"
)
rv.setOnClickPendingIntent(R.id.error_icon, getErrorIntent(context, throwable))
AppWidgetManager.getInstance(context).updateAppWidget(AppWidgetId, rv)
}
- إنشاء طلب intent في انتظار المراجعة يشير إلى
GlanceAppWidgetReceiver
private fun getErrorIntent(context: Context, throwable: Throwable): PendingIntent {
val intent = Intent(context, UpgradeToHelloWorldPro::class.java)
intent.setAction("widgetError")
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
}
- التعامل مع الهدف في "
GlanceAppWidgetReceiver
"
override fun onReceive(context: Context, intent: Intent) {
super.onReceive(context, intent)
Log.e("ErrorOnClick", "Button was clicked.");
}