एक्सटेंशन ऐप्लिकेशन और लोकल निर्देश

Android Management API (AMAPI) SDK टूल की मदद से, ईएमएम के तय किए गए एक्सटेंशन ऐप्लिकेशन को ये काम करने में मदद मिलती है सीधे Android Device Policy (ADP) से संपर्क करें और Commands लागू करें डिवाइस पर.

AMAPI SDK टूल के साथ इंटिग्रेट करने से, इस लाइब्रेरी और इसे अपने ऐप्लिकेशन में जोड़ने का तरीका जानें.

SDK टूल के इंटिग्रेट होने के बाद, आपका एक्सटेंशन ऐप्लिकेशन, एडीपी के साथ इन बातों के लिए संपर्क कर सकता है:

समस्या से जुड़ा निर्देश

एक्सटेंशन ऐप्लिकेशन, ADP का इस्तेमाल करके जारी किए जाने वाले निर्देशों का अनुरोध कर सकता है. IssueCommandRequest में अनुरोध के लिए वह ऑब्जेक्ट है जिसमें जानकारी मौजूद होगी जारी करने का आदेश और विशिष्ट पैरामीटर.

नीचे दिए गए स्निपेट में, पैकेज के डेटा को मिटाने का अनुरोध करने का तरीका बताया गया है:

import android.util.Log;
...
import com.google.android.managementapi.commands.LocalCommandClientFactory;
import com.google.android.managementapi.commands.model.Command;
import com.google.android.managementapi.commands.model.GetCommandRequest;
import com.google.android.managementapi.commands.model.IssueCommandRequest;
import com.google.android.managementapi.commands.model.IssueCommandRequest.ClearAppsData;
import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;

...
  void issueClearAppDataCommand(ImmutableList<String> packageNames) {
    Futures.addCallback(
        LocalCommandClientFactory.create(getContext())
            .issueCommand(createClearAppRequest(packageNames)),
        new FutureCallback<Command>() {
          @Override
          public void onSuccess(Command result) {
            // Process the returned command result here
            Log.i(TAG, "Successfully issued command");
          }

          @Override
          public void onFailure(Throwable t) {
            Log.e(TAG, "Failed to issue command", t);
          }
        },
        MoreExecutors.directExecutor());
  }

  IssueCommandRequest createClearAppRequest(ImmutableList<String> packageNames) {
    return IssueCommandRequest.builder()
        .setClearAppsData(
            ClearAppsData.builder()
                .setPackageNames(packageNames)
                .build()
        )
        .build();
  }
...

पहले के उदाहरण में, खास जानकारी के लिए ऐप्लिकेशन डेटा का साफ़ तौर पर अनुरोध करना दिखाया गया है पैकेज और आदेश के सफलतापूर्वक जारी होने तक इंतज़ार कर रहे हैं. अगर आपने सफलतापूर्वक जारी किया गया, Command ऑब्जेक्ट को वर्तमान कमांड स्टेटस और कमांड आईडी. इनका इस्तेमाल, बाद में लंबे समय से चल रहे किसी भी निर्देश के लिए.

निर्देश पाएं

एक्सटेंशन ऐप्लिकेशन, पहले जारी किए गए निर्देश अनुरोधों की स्थिति के बारे में क्वेरी कर सकता है. यहां की यात्रा पर हूं किसी आदेश की स्थिति को पुनः प्राप्त करने के लिए, आपको आदेश आईडी की आवश्यकता होगी ( निर्देश का अनुरोध करें). नीचे दिया गया स्निपेट दिखाता है कि GetCommandRequest से ADP.

import android.util.Log;
...
import com.google.android.managementapi.commands.LocalCommandClientFactory;
...
import com.google.android.managementapi.commands.model.GetCommandRequest;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;

...
  void getCommand(String commandId) {
    Futures.addCallback(
        LocalCommandClientFactory.create(getApplication())
            .getCommand(GetCommandRequest.builder().setCommandId(commandId).build()),
        new FutureCallback<Command>() {
          @Override
          public void onSuccess(Command result) {
            // Process the returned command result here
            Log.i(Constants.TAG, "Successfully issued command");
          }

          @Override
          public void onFailure(Throwable t) {
            Log.e(Constants.TAG, "Failed to issue command", t);
          }
        },
        MoreExecutors.directExecutor());
  }
  ...

निर्देश के स्टेटस में बदलाव करने वाले कॉलबैक सुनें

एक्सटेंशन ऐप्लिकेशन, स्थिति में होने वाले बदलावों के अपडेट पाने के लिए कॉलबैक रजिस्टर कर सकता है का पालन करने के लिए लंबे समय तक चलने वाले निर्देशों का पालन करें. इसके लिए, यह तरीका अपनाएं:

  1. निर्देश की स्थिति में किए गए बदलावों की सूचना CommandListener को दी जाती है. इसे लागू करें इंटरफ़ेस आपके लिए बनाया गया है और इसे ठीक करने के तरीके के बारे में स्थिति के बारे में अपडेट मिले.
  2. NotificationReceiverService की सदस्यता को बड़ा करें और CommandListener उपलब्ध कराएं इंस्टेंस.
  3. Android में, एक्सटेंडेड NotificationReceiverService की क्लास का नाम डालें Management API की नीति (नीति का कॉन्फ़िगरेशन देखें).

    import com.google.android.managementapi.commands.CommandListener;
    import com.google.android.managementapi.notification.NotificationReceiverService;
    
    ...
    
    public class SampleCommandService extends NotificationReceiverService {
    
      @Override
      protected void setupInjection() {
        // (Optional) If using DI and needs initialisation then use this method.
      }
    
      @Override
      public CommandListener getCommandListener() {
        // return the concrete implementation from previous step
        return ...;
      }
    }
    
  4. सेवा को अपने AndroidManifest.xml में जोड़ें और पक्का करें कि उसे एक्सपोर्ट कर दिया गया हो.

    <service
     android:name = ".notification.SampleCommandService"
     android:exported = "true" />
    

नीति से जुड़ा कॉन्फ़िगरेशन

एक्सटेंशन ऐप्लिकेशन को सीधे ADP से संपर्क करने के लिए, ईएमएम को ये काम करने होंगे extensionConfig की नीति उपलब्ध कराएं.

 "applications": [{
   "packageName": "com.amapi.extensibility.demo",
   ...
   "extensionConfig": {
     "signingKeyFingerprintsSha256": [
       // Include signing key of extension app
     ],
     // Optional if callback is implemented
     "notificationReceiver": "com.amapi.extensibility.demo.notification.SampleCommandService"
   }
 }]

टेस्ट करना

यूनिट टेस्टिंग

LocalCommandClient एक इंटरफ़ेस है. इसलिए, इसकी मदद से ऐसे नतीजे दिखाए जा सकते हैं जिनकी जांच की जा सकती है लागू करना.

इंटिग्रेशन की जांच करना

एडीपी के साथ टेस्ट करने के लिए, यहां दी गई जानकारी की ज़रूरत होगी:

  1. एक्सटेंशन ऐप्लिकेशन का पैकेज नाम.
  2. ऐप्लिकेशन से जुड़े हस्ताक्षर का हेक्स-एन्कोडेड SHA-256 हैश पैकेज.
  3. वैकल्पिक रूप से, अगर कॉलबैक का परीक्षण किया जा रहा है - तो इससे सेवा का पूरी तरह क्वालिफ़ाइड नाम कॉलबैक की सुविधा के लिए पेश की गई नई सेवा. (पूरी तरह योग्य नाम CommandService उदाहरण में).