App di esempio

Questa pagina presenta un'app di esempio che mostra come eseguire il provisioning di un dispositivo e inviagli un comando di riavvio. L'app utilizza l'API Android Management libreria client Java.

Prima di iniziare

  1. Scarica la libreria client Java dell'API Android Management e aggiungi tutti i file jar a classpath.
  2. Crea o seleziona un progetto Google Cloud proprietario del dell'azienda creata.
  3. Attiva l'API Android Management nel progetto.
  4. Crea o seleziona un account di servizio con il ruolo di proprietario o editor nella progetto.
  5. Seleziona un Account Google per registrarti per una nuova azienda. L'account non può l'amministratore di qualsiasi azienda preesistente.
  6. Imposta le costanti PROJECT_ID e SERVICE_ACCOUNT_CREDENTIAL_FILE nel di esempio di codice.
  7. Modifica la costante APP_PACKAGE_NAME nell'esempio di codice per installare l'app di tua scelta.

Codice

package sample;  import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpRequestFactory; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.androidmanagement.v1.AndroidManagement; import com.google.api.services.androidmanagement.v1.model.ApplicationPolicy; import com.google.api.services.androidmanagement.v1.model.Command; import com.google.api.services.androidmanagement.v1.model.Device; import com.google.api.services.androidmanagement.v1.model.EnrollmentToken; import com.google.api.services.androidmanagement.v1.model.Enterprise; import com.google.api.services.androidmanagement.v1.model.ListDevicesResponse; import com.google.api.services.androidmanagement.v1.model.PersistentPreferredActivity; import com.google.api.services.androidmanagement.v1.model.Policy; import com.google.api.services.androidmanagement.v1.model.SignupUrl; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.security.GeneralSecurityException; import java.util.Arrays; import java.util.Collections; import java.util.List;  public class SampleApp {   /** The id of the Google Cloud Platform project. */   private static final String PROJECT_ID = "YOUR_PROJECT_ID";    /** The JSON credential file for the service account. */   private static final String SERVICE_ACCOUNT_CREDENTIAL_FILE =       "/PATH/TO/YOUR_FILE";    /** The id of the policy for the dedicated device. */   private static final String POLICY_ID = "samplePolicy";    /** The package name of the app. */   private static final String APP_PACKAGE_NAME =       "com.google.android.apps.youtube.gaming";    /** The OAuth scope for the Android Management API. */   private static final String OAUTH_SCOPE =       "https://www.googleapis.com/auth/androidmanagement";    /** The name of this app. */   private static final String APP_NAME = "Android Management API sample app";    /** The Android Management API client. */   private final AndroidManagement androidManagementClient;    public static void main(String[] args)       throws IOException, GeneralSecurityException {     new SampleApp(getAndroidManagementClient()).run();   }    public SampleApp(AndroidManagement androidManagementClient) {     this.androidManagementClient = androidManagementClient;   }    /** Runs the app. */   public void run() throws IOException {     // Create an enterprise. If you've already created an enterprise, the     // createEnterprise call can be commented out and replaced with your     // enterprise name.     String enterpriseName = createEnterprise();     System.out.println("Enterprise created with name: " + enterpriseName);      // Set the policy to be used by the device.     setPolicy(enterpriseName, POLICY_ID, getDedicatedDevicePolicy());      // Create an enrollment token to enroll the device.     String token = createEnrollmentToken(enterpriseName, POLICY_ID);     System.out.println("Enrollment token (to be typed on device): " + token);      // List some of the devices for the enterprise. There will be no devices for     // a newly created enterprise, but you can run the app again with an     // existing enterprise after enrolling a device.     List<Device> devices = listDevices(enterpriseName);     for (Device device : devices) {       System.out.println("Found device with name: " + device.getName());     }      // If there are any devices, reboot one.     if (devices.isEmpty()) {       System.out.println("No devices found.");     } else {       rebootDevice(devices.get(0));     }   }    /** Builds an Android Management API client. */   private static AndroidManagement getAndroidManagementClient()       throws IOException, GeneralSecurityException {     try (FileInputStream input = new FileInputStream(SERVICE_ACCOUNT_CREDENTIAL_FILE)) {       final GoogleCredentials credential =           GoogleCredentials.fromStream(input).createScoped(Collections.singleton(OAUTH_SCOPE));        final HttpCredentialsAdapter credentialsAdapter = new HttpCredentialsAdapter(credential);       final HttpRequestFactory requestFactory =           new NetHttpTransport().createRequestFactory(credentialsAdapter);        return new AndroidManagement.Builder(               GoogleNetHttpTransport.newTrustedTransport(),               GsonFactory.getDefaultInstance(),               requestFactory.getInitializer())           .setApplicationName(APP_NAME)           .build();     }   }    /** Creates a new enterprise. Returns the enterprise name. */   private String createEnterprise() throws IOException {     // Initiate signup process.     System.out.println("Creating signup URL...");     SignupUrl signupUrl =         androidManagementClient             .signupUrls()             .create()             .setProjectId(PROJECT_ID)             .setCallbackUrl("https://localhost:9999")             .execute();     System.out.print(         "To sign up for a new enterprise, open this URL in your browser: ");     System.out.println(signupUrl.getUrl());     System.out.println(         "After signup, you will see an error page in the browser.");     System.out.print(         "Paste the enterpriseToken value from the error page URL here: ");     String enterpriseToken =         new BufferedReader(new InputStreamReader(System.in)).readLine();      // Create the enterprise.     System.out.println("Creating enterprise...");     return androidManagementClient         .enterprises()         .create(new Enterprise())         .setProjectId(PROJECT_ID)         .setSignupUrlName(signupUrl.getName())         .setEnterpriseToken(enterpriseToken)         .execute()         .getName();   }    /** Gets a Policy for a dedicated device. */   private Policy getDedicatedDevicePolicy() {     List<String> categories = Arrays.asList(         "android.intent.category.HOME",         "android.intent.category.DEFAULT"     );      return new Policy()         .setApplications(             Collections.singletonList(                 new ApplicationPolicy()                     .setPackageName(APP_PACKAGE_NAME)                     .setInstallType("FORCE_INSTALLED")                     .setDefaultPermissionPolicy("GRANT")                     .setLockTaskAllowed(true)))         .setPersistentPreferredActivities(             Collections.singletonList(                 new PersistentPreferredActivity()                     .setReceiverActivity(APP_PACKAGE_NAME)                     .setActions(                         Collections.singletonList("android.intent.action.MAIN"))                     .setCategories(categories)))         .setKeyguardDisabled(true)         .setStatusBarDisabled(true);   }    /** Sets the policy of the given id to the given value. */   private void setPolicy(String enterpriseName, String policyId, Policy policy)       throws IOException {     System.out.println("Setting policy...");     String name = enterpriseName + "/policies/" + policyId;     androidManagementClient         .enterprises()         .policies()         .patch(name, policy)         .execute();   }    /** Creates an enrollment token. */   private String createEnrollmentToken(String enterpriseName, String policyId)       throws IOException {     System.out.println("Creating enrollment token...");     EnrollmentToken token =         new EnrollmentToken().setPolicyName(policyId).setDuration("86400s");     return androidManagementClient         .enterprises()         .enrollmentTokens()         .create(enterpriseName, token)         .execute()         .getValue();   }    /** Lists the first page of devices for an enterprise. */   private List<Device> listDevices(String enterpriseName) throws IOException {     System.out.println("Listing devices...");     ListDevicesResponse response =         androidManagementClient             .enterprises()             .devices()             .list(enterpriseName)             .execute();     return response.getDevices() == null         ? Collections.emptyList() : response.getDevices();   }    /** Reboots a device. Note that reboot only works on Android N+. */   private void rebootDevice(Device device) throws IOException {     System.out.println(         "Sending reboot command to " + device.getName() + "...");     Command command = new Command().setType("REBOOT");     androidManagementClient         .enterprises()         .devices()         .issueCommand(device.getName(), command)         .execute();   } }