كتاب الطبخ الخاص بالأجهزة المخصصة

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

تطبيقات الشاشة الرئيسية المخصّصة

هذه الوصفات مفيدة في حال تطوير تطبيق ليحلّ محلّ Android Home. ومشغّل التطبيقات.

كُن تطبيق الشاشة الرئيسية

يمكنك ضبط تطبيقك كتطبيق الشاشة الرئيسية للجهاز كي يتم تشغيله. تلقائيًا عند تشغيل الجهاز. يمكنك أيضًا تفعيل وضع زرّ يؤدي إلى عرض تطبيقك المدرَج في القائمة المسموح بها في المقدّمة أثناء القفل. وضع المهمة.

تتعامل جميع تطبيقات الشاشة الرئيسية مع فئة الهدف CATEGORY_HOME، وهي هي طريقة النظام في التعرّف على تطبيق الشاشة الرئيسية. عليك ضبط أحد التطبيقات ليصبح تطبيق الشاشة الرئيسية التلقائي. من أنشطة تطبيقك باعتباره المعالج المفضَّل لـ Home intent، وذلك من خلال استدعاء DevicePolicyManager.addPersistentPreferredActivity() كما هو موضح في المثال التالي:

Kotlin

// Create an intent filter to specify the Home category.
val filter = IntentFilter(Intent.ACTION_MAIN)
filter.addCategory(Intent.CATEGORY_HOME)
filter.addCategory(Intent.CATEGORY_DEFAULT)

// Set the activity as the preferred option for the device.
val activity = ComponentName(context, KioskModeActivity::class.java)
val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE)
        as DevicePolicyManager
dpm.addPersistentPreferredActivity(adminName, filter, activity)

Java

// Create an intent filter to specify the Home category.
IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
filter.addCategory(Intent.CATEGORY_DEFAULT);

// Set the activity as the preferred option for the device.
ComponentName activity = new ComponentName(context, KioskModeActivity.class);
DevicePolicyManager dpm =
    (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
dpm.addPersistentPreferredActivity(adminName, filter, activity);

لا يزال عليك الإفصاح عن فلتر الأهداف. في ملف بيان التطبيق كما هو موضح في مقتطف XML التالي:

<activity
        android:name=".KioskModeActivity"
        android:label="@string/kiosk_mode"
        android:launchMode="singleInstance"
        android:excludeFromRecents="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.HOME"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

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

عرض مهام منفصلة

FLAG_ACTIVITY_NEW_TASK يمكن أن تكون علامة مفيدة التطبيقات من نوع المشغل لأن كل مهمة جديدة تظهر كعنصر منفصل في شاشة "نظرة عامة" لمعرفة المزيد من المعلومات عن المهام في شاشة "نظرة عامة"، يمكنك قراءة العناصر الأخيرة. الشاشة:

الأكشاك العامة

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

قفل الجهاز

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

الجدول 1. قيود المستخدم على أجهزة Kiosk
قيود المستخدم الوصف
DISALLOW_FACTORY_RESET لمنع مستخدم الجهاز من إعادة تعيين الجهاز إلى الإعدادات الافتراضية للمصنع. يمكن لمشرفي الأجهزة المُدارة بالكامل والمستخدم الأساسي ضبط هذا الإعداد. القيد.
DISALLOW_SAFE_BOOT منع مستخدم الجهاز من بدء الجهاز في الوضع الآمن حيث لا يفتح النظام تطبيقك تلقائيًا. المشرفون في الأجهزة المُدارة والمستخدم الأساسي من فرض هذا القيد.
DISALLOW_MOUNT_PHYSICAL_MEDIA منع مستخدم الجهاز من تثبيت أي وحدات تخزين قد يحتاج إليها توصيل الجهاز بالجهاز. مشرفو الأجهزة المُدارة بالكامل والمستخدم الأساسي تعيين هذا القيد.
DISALLOW_ADJUST_VOLUME كتم صوت الجهاز ومنع مستخدم الجهاز من تغيير الصوت إعدادات الصوت والاهتزاز. التأكّد من أنّ جهاز Kiosk لا يحتاج إلى صوت لتشغيل الوسائط أو ميزات تسهيل الاستخدام. مشرفو الحسابات المُدارة بالكامل يمكن ضبط هذا الإعداد من خلال الأجهزة والمستخدم الأساسي والمستخدمين الثانويين والملفات الشخصية للعمل القيد.
DISALLOW_ADD_USER منع مستخدم الجهاز من إضافة مستخدمين جدد، مثل المستخدمين الثانويين أو المستخدمين المقيدين. يضيف النظام تلقائيًا قيود المستخدم هذه إلى أجهزة مُدارة بالكامل ولكن ربما تم محوها. المشرفون في الأجهزة المُدارة والمستخدم الأساسي من فرض هذا القيد.

يوضّح المقتطف التالي كيفية ضبط القيود:

Kotlin

// If the system is running in lock task mode, set the user restrictions
// for a kiosk after launching the activity.
arrayOf(
        UserManager.DISALLOW_FACTORY_RESET,
        UserManager.DISALLOW_SAFE_BOOT,
        UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA,
        UserManager.DISALLOW_ADJUST_VOLUME,
        UserManager.DISALLOW_ADD_USER).forEach { dpm.addUserRestriction(adminName, it) }

Java

// If the system is running in lock task mode, set the user restrictions
// for a kiosk after launching the activity.
String[] restrictions = {
    UserManager.DISALLOW_FACTORY_RESET,
    UserManager.DISALLOW_SAFE_BOOT,
    UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA,
    UserManager.DISALLOW_ADJUST_VOLUME,
    UserManager.DISALLOW_ADD_USER};

for (String restriction: restrictions) dpm.addUserRestriction(adminName, restriction);

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

إيقاف مربعات حوار الأخطاء

في بعض البيئات، مثل عروض البيع بالتجزئة أو المعلومات العلنية قد لا ترغب في عرض مربعات حوار الأخطاء للمستخدمين. في Android 9.0 (واجهة برمجة التطبيقات من المستوى 28) أو أعلى، فيمكنك إيقاف مربعات حوار أخطاء النظام إذا تعطلت التطبيقات غير المستجيبة عن طريق إضافة مستخدم DISALLOW_SYSTEM_ERROR_DIALOGS القيد. يعيد النظام تشغيل التطبيقات التي لا تستجيب كما لو أغلقها مستخدم الجهاز. التطبيق من مربع الحوار. يوضّح المثال التالي كيفية إجراء ذلك:

Kotlin

override fun onEnabled(context: Context, intent: Intent) {
    val dpm = getManager(context)
    val adminName = getWho(context)

    dpm.addUserRestriction(adminName, UserManager.DISALLOW_SYSTEM_ERROR_DIALOGS)
}

Java

public void onEnabled(Context context, Intent intent) {
  DevicePolicyManager dpm = getManager(context);
  ComponentName adminName = getWho(context);

  dpm.addUserRestriction(adminName, UserManager.DISALLOW_SYSTEM_ERROR_DIALOGS);
}

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

إبقاء الشاشة قيد التشغيل

في حال إنشاء جهاز Kiosk، يمكنك إيقاف جهاز السكون عند تشغيل نشاط تطبيقك. إضافة علامة تنسيق FLAG_KEEP_SCREEN_ON على تطبيقك كما هو موضح في المثال التالي:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // Keep the screen on and bright while this kiosk activity is running.
    window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  // Keep the screen on and bright while this kiosk activity is running.
  getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

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

يمكنك أيضًا ضبط السمة STAY_ON_WHILE_PLUGGED_IN إعداد عام لإبقاء الجهاز نشطًا أثناء اتصاله بمصدر طاقة. يمكن لمشرفي الأجهزة المُدارة بالكامل، التي تعمل بالإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، إجراء ما يلي: الاتصال بالرقم DevicePolicyManager.setGlobalSetting() كما هو موضّح في المثال التالي:

Kotlin

val pluggedInto = BatteryManager.BATTERY_PLUGGED_AC or
        BatteryManager.BATTERY_PLUGGED_USB or
        BatteryManager.BATTERY_PLUGGED_WIRELESS
dpm.setGlobalSetting(adminName,
        Settings.Global.STAY_ON_WHILE_PLUGGED_IN, pluggedInto.toString())

Java

int pluggedInto = BatteryManager.BATTERY_PLUGGED_AC |
    BatteryManager.BATTERY_PLUGGED_USB |
    BatteryManager.BATTERY_PLUGGED_WIRELESS;
dpm.setGlobalSetting( adminName,
    Settings.Global.STAY_ON_WHILE_PLUGGED_IN, String.valueOf(pluggedInto));

حِزم التطبيقات

يتضمّن هذا القسم وصفات لتثبيت التطبيقات بكفاءة على الأجهزة المخصّصة.

تخزين حِزم التطبيقات في ذاكرة التخزين المؤقت

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

يحدث تثبيت حزمة APK مخزَّنة مؤقتًا (تم تثبيتها من قبل على الجهاز) في مرحلتين:

  1. مكوّن المشرف في جهاز مُدار بالكامل (أو جهاز مفوَّض - يُرجى الاطّلاع على التالية) قائمة حِزم APK التي يجب الاحتفاظ بها على الجهاز.
  2. يمكن لمكونات المشرف للمستخدمين الثانويين التابعين (أو المفوَّضين) تثبيت حزمة APK المخزّنة مؤقتًا نيابةً عن المستخدم. مشرفو الحسابات المُدارة بالكامل أو المستخدم الأساسي أو ملف شخصي للعمل تابع (أو المفوَّضين) يمكنهم أيضًا تثبيت التطبيق المخزن مؤقتًا إذا لزم الأمر.

لضبط قائمة حِزم APK للاحتفاظ بها على الجهاز، يتصل المشرف بالإنترنت. DevicePolicyManager.setKeepUninstalledPackages() لا تتحقَّق هذه الطريقة من تثبيت حزمة APK على الجهاز، وهذه الطريقة مفيدة إذا: ترغب في تثبيت تطبيق ما قبل احتياجه للمستخدم مباشرةً. للحصول على قائمة الحزم المحددة مسبقًا، فيمكنك استدعاء DevicePolicyManager.getKeepUninstalledPackages() بعد الاتصال بـ setKeepUninstalledPackages() مع إجراء التغييرات أو عند الاتصال برقم ثانوي حذف المستخدم، يحذف النظام أي حِزم APK مخزّنة مؤقتًا لم تعد هناك حاجة إليها.

لتثبيت حِزمة APK مخزَّنة مؤقتًا، يُرجى الاتصال DevicePolicyManager.installExistingPackage() لا يمكن لهذه الطريقة تثبيت أي تطبيق إلا إذا خزّنه النظام مؤقتًا، على حل الجهاز المخصص (أو مستخدم الجهاز) تثبيت التطبيق أولاً على الجهاز قبل أن تتمكن من استدعاء هذه الطريقة.

يوضح النموذج التالي كيف يمكنك استخدام طلبات البيانات من واجهة برمجة التطبيقات هذه في مشرف جهاز مُدار بالكامل ومستخدم ثانوي:

Kotlin

// Set the package to keep. This method assumes that the package is already
// installed on the device by managed Google Play.
val cachedAppPackageName = "com.example.android.myapp"
dpm.setKeepUninstalledPackages(adminName, listOf(cachedAppPackageName))

// ...

// The admin of a secondary user installs the app.
val success = dpm.installExistingPackage(adminName, cachedAppPackageName)

Java

// Set the package to keep. This method assumes that the package is already
// installed on the device by managed Google Play.
String cachedAppPackageName = "com.example.android.myapp";
List<String> packages = new ArrayList<String>();
packages.add(cachedAppPackageName);
dpm.setKeepUninstalledPackages(adminName, packages);

// ...

// The admin of a secondary user installs the app.
boolean success = dpm.installExistingPackage(adminName, cachedAppPackageName);

تفويض التطبيقات

يمكنك تفويض تطبيق آخر لإدارة التخزين المؤقت للتطبيقات. يمكنك القيام بذلك فصل ميزات الحل أو توفير القدرة على استخدام مشرفي تكنولوجيا المعلومات تطبيقاتهم الخاصة. يحصل التطبيق المفوَّض على الأذونات نفسها التي يحصل عليها المشرف. المكون. على سبيل المثال، يمكن لمفوَّض تطبيق عن مشرف مستخدم ثانوي الاتصال به "installExistingPackage()" ولكن يتعذّر عليه الاتصال بـ "setKeepUninstalledPackages()".

لإجراء مكالمة مفوَّضة DevicePolicyManager.setDelegatedScopes() وإدراج DELEGATION_KEEP_UNINSTALLED_PACKAGES في وسيطة النطاقات. يوضح المثال التالي كيفية إنشاء تطبيق آخر المفوَّض:

Kotlin

var delegatePackageName = "com.example.tools.kept_app_assist"

// Check that the package is installed before delegating.
try {
    context.packageManager.getPackageInfo(delegatePackageName, 0)
    dpm.setDelegatedScopes(
            adminName,
            delegatePackageName,
            listOf(DevicePolicyManager.DELEGATION_KEEP_UNINSTALLED_PACKAGES))
} catch (e: PackageManager.NameNotFoundException) {
    // The delegate app isn't installed. Send a report to the IT admin ...
}

Java

String delegatePackageName = "com.example.tools.kept_app_assist";

// Check that the package is installed before delegating.
try {
  context.getPackageManager().getPackageInfo(delegatePackageName, 0);
  dpm.setDelegatedScopes(
      adminName,
      delegatePackageName,
      Arrays.asList(DevicePolicyManager.DELEGATION_KEEP_UNINSTALLED_PACKAGES));
} catch (PackageManager.NameNotFoundException e) {
  // The delegate app isn't installed. Send a report to the IT admin ...
}

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

تثبيت حِزم التطبيقات

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

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

الجدول 2. إصدارات Android التي تتيح تثبيت الحزم بدون تفاعل المستخدم
إصدار Android مكوّن المشرف للتثبيت وإلغاء التثبيت
Android 9.0 (المستوى 28 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث المستخدمون الثانويون التابعون والملفات الشخصية للعمل - كلاهما في الإدارة الكاملة جهازان
الإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث أجهزة مُدارة بالكامل

ستوضح كيفية توزيع نسخة واحدة أو أكثر من حزمة APK على أجهزة مخصصة يعتمدون على مدى بُعد الأجهزة وربما على مدى بُعدها من بعضها البعض. يجب أن يتّبع الحل أفضل ممارسات الأمان. قبل تثبيت حِزم APK على الأجهزة المخصّصة.

يمكنك استخدام PackageInstaller.Session لإنشاء جلسة في قائمة انتظار واحدة. أو أكثر من APK للتثبيت. في المثال التالي، نحصل على الحالة ملاحظات في نشاطنا (وضع singleTop) ولكن يمكنك استخدام أو مستقبِل البث:

Kotlin

// First, create a package installer session.
val packageInstaller = context.packageManager.packageInstaller
val params = PackageInstaller.SessionParams(
        PackageInstaller.SessionParams.MODE_FULL_INSTALL)
val sessionId = packageInstaller.createSession(params)
val session = packageInstaller.openSession(sessionId)

// Add the APK binary to the session. The APK is included in our app binary
// and is read from res/raw but file storage is a more typical location.
// The I/O streams can't be open when installation begins.
session.openWrite("apk", 0, -1).use { output ->
    getContext().resources.openRawResource(R.raw.app).use { input ->
        input.copyTo(output, 2048)
    }
}

// Create a status receiver to report progress of the installation.
// We'll use the current activity.
// Here we're requesting status feedback to our Activity but this can be a
// service or broadcast receiver.
val intent = Intent(context, activity.javaClass)
intent.action = "com.android.example.APK_INSTALLATION_ACTION"
val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
val statusReceiver = pendingIntent.intentSender

// Start the installation. Because we're an admin of a fully managed device,
// there isn't any user interaction.
session.commit(statusReceiver)

Java

// First, create a package installer session.
PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
    PackageInstaller.SessionParams.MODE_FULL_INSTALL);
int sessionId = packageInstaller.createSession(params);
PackageInstaller.Session session = packageInstaller.openSession(sessionId);

// Add the APK binary to the session. The APK is included in our app binary
// and is read from res/raw but file storage is a more typical location.
try (
    // These I/O streams can't be open when installation begins.
    OutputStream output = session.openWrite("apk", 0, -1);
    InputStream input = getContext().getResources().openRawResource(R.raw.app);
) {
  byte[] buffer = new byte[2048];
  int n;
  while ((n = input.read(buffer)) >= 0) {
    output.write(buffer, 0, n);
  }
}

// Create a status receiver to report progress of the installation.
// We'll use the current activity.
// Here we're requesting status feedback to our Activity but this can be a
// service or broadcast receiver.
Intent intent = new Intent(context, getActivity().getClass());
intent.setAction("com.android.example.APK_INSTALLATION_ACTION");
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
IntentSender statusReceiver = pendingIntent.getIntentSender();

// Start the installation. Because we're an admin of a fully managed device,
// there isn't any user interaction.
session.commit(statusReceiver);

ترسل الجلسة ملاحظات عن الحالة حول عملية التثبيت باستخدام عناصر intent. التحقُّق من الإجابة كل حقل EXTRA_STATUS في كل intent للحصول على الحالة. يُرجى العلم أنّ المشرفين لا يتلقّون تعديل حالة STATUS_PENDING_USER_ACTION لأنّ مستخدم الجهاز لا يحتاج إلى الموافقة على عملية التثبيت.

لإلغاء تثبيت التطبيقات، يمكنك الاتصال بالرقم PackageInstaller.uninstall. يمكن لمشرفي الأجهزة المُدارة بالكامل والمستخدمين والملفات الشخصية للعمل إلغاء تثبيت الحِزم. بدون تفاعل المستخدم مع إصدارات Android المتوافقة (راجِع الجدول 2).

تجميد تحديثات النظام

تتلقّى أجهزة Android تحديثات عبر الهواء (OTA) للنظام والتطبيق البرامج. لتجميد إصدار نظام التشغيل خلال الفترات المهمة، مثل العطلات أو في أوقات الانشغال الأخرى، يمكن للأجهزة المخصّصة تعليق تحديثات نظام التحديث عبر الهواء لما يصل إلى 90 أيام. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة إدارة تحديثات النظام.

الإعداد عن بُعد

تسمح عمليات الضبط المُدارة في Android لمشرفي تكنولوجيا المعلومات بما يلي: تهيئة تطبيقك عن بُعد. قد ترغب في عرض إعدادات مثل القوائم المسموح بها أو مضيفي الشبكات أو عناوين URL للمحتوى لجعل تطبيقك أكثر فائدة لتكنولوجيا المعلومات المشرفين.

إذا كشف تطبيقك عن إعداداته، يُرجى تضمين الإعدادات في التوثيق. لمزيد من المعلومات حول إظهار إعدادات تطبيقك والتفاعل معها التغييرات في الإعدادات، يُرجى الاطّلاع على إعداد عمليات الضبط المُدارة.

إعدادات التطوير

أثناء تطوير حلك للأجهزة المخصصة، من الشائع مفيدة لإعداد تطبيقك كمشرف لجهاز مُدار بالكامل بدون إعادة تعيين. لضبط مشرف جهاز مُدار بالكامل، اتّبِع الخطوات التالية:

  1. أنشِئ تطبيق وحدة التحكّم بسياسة الجهاز (DPC) وثبِّته على الجهاز.
  2. تأكَّد من عدم وجود حسابات على الجهاز.
  3. شغِّل الأمر التالي في واجهة الأوامر Android Debug Bridge (adb). إِنْتَ بحاجة إلى استبدال com.example.dpc/.MyDeviceAdminReceiver في المثال بـ اسم مكوّن مشرف تطبيقك:

    adb shell dpm set-device-owner com.example.dpc/.MyDeviceAdminReceiver

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

مصادر إضافية

لمعرفة المزيد من المعلومات عن الأجهزة المخصّصة، اقرأ المستندات التالية: