Příklady kódu AndroiduAndroid code examples

Tento článek ukazuje, jak kód prvky pro verzi systému Android sady RMS SDK.This article shows how to code elements for the Android version of the RMS SDK.

Poznámka: v tomto článku termín MSIPC (Microsoft Information Protection a řízení) odkazuje na procesu klienta.Note In this article, The term MSIPC (Microsoft Information Protection and Control) refers to the client process.

Použití sady Microsoft Rights Management SDK 4.2 – klíčové scénářeUsing the Microsoft Rights Management SDK 4.2 - key scenarios

Tyto ukázky kódu jsou převzaty z větší ukázkové aplikace reprezentují vývojové scénáře důležité pro vaši orientaci v této sadě SDK.These code samples are taken from a larger sample application representing development scenarios important to your orientation to this SDK. Se ukazují, jak používat:They show how to use:

  • Formátu Microsoft Protected File, označované taky jako chráněný soubor.The Microsoft Protected File format, also called a protected file.
  • Vlastních chráněných formátů souborůCustom protected file formats
  • Vlastní uživatelské rozhraní (UI) ovládací prvkyCustom user interface (UI) controls

MSIPCSampleApp vzorová aplikace je k dispozici pro použití s touto sadou SDK pro Android operační systém.The MSIPCSampleApp sample application is available for use with this SDK for the Android operating system. Další informace najdete v tématu rms-sdk-uživatelského rozhraní for-android.To learn more, see rms-sdk-ui-for-android.

Scénář: Využití souboru chráněného RMSScenario: Consume an RMS protected file

  • Krok 1: vytvoření ProtectedFileInputStream.Step 1: Create a ProtectedFileInputStream.

    Zdroj: MsipcAuthenticationCallback.javaSource: MsipcAuthenticationCallback.java

    Popis: vytváření instancí ProtectedFileInputStream objektu a implementovat ověřování služby.Description: Instantiate a ProtectedFileInputStream object and implement service authentication. Použití AuthenticationRequestCallback získá token předáním instance AuthenticationRequestCallback, jako parametr mRmsAuthCallback, na MSIPC ROZHRANÍ API.Use the AuthenticationRequestCallback to get a token by passing an instance of AuthenticationRequestCallback, as the parameter mRmsAuthCallback, to the MSIPC API. Viz volání ProtectedFileInputStream.create téměř na konci sekce kódu následujícího příkladu.See the call to ProtectedFileInputStream.create near the end of the following example code section.

        public void startContentConsumptionFromPtxtFileFormat(InputStream inputStream)
        {
            CreationCallback<ProtectedFileInputStream> protectedFileInputStreamCreationCallback =
              new CreationCallback<ProtectedFileInputStream>()
            {
                @Override
                public Context getContext()
                {
                   …
               }
    
                @Override
                public void onCancel()
                {
                   …
                }
    
                @Override
                public void onFailure(ProtectionException e)
                {
                   …
                }
    
                @Override
                public void onSuccess(ProtectedFileInputStream protectedFileInputStream)
                {
                   …
                   …
                    byte[] dataChunk = new byte[16384];
                    try
                    {
                        while ((nRead = protectedFileInputStream.read(dataChunk, 0,
                                dataChunk.length)) != -1)
                        {
                            …
                        }
                         …
                        protectedFileInputStream.close();
                    }
                    catch (IOException e)
                    {
                      …
                    }  
              }
            };
            try
            {
               …
                ProtectedFileInputStream.create(inputStream, null, mRmsAuthCallback,
                                                PolicyAcquisitionFlags.NONE,
                                                protectedFileInputStreamCreationCallback);
            }
            catch (com.microsoft.rightsmanagement.exceptions.InvalidParameterException e)
            {
                …
            }
        }
    
  • Krok 2: nastavení ověřování pomocí Active Directory Authentication Library (ADAL).Step 2: Set up authentication using the Active Directory Authentication Library (ADAL).

    Zdroj: MsipcAuthenticationCallback.javaSource: MsipcAuthenticationCallback.java.

    Popis: Tento krok používá ADAL pro implementaci AuthenticationRequestCallback s ukázkovými ověřovacími parametry.Description: This step uses ADAL to implement an AuthenticationRequestCallback with example authentication parameters. Další informace najdete v tématu Azure AD Authentication Library (ADAL).To learn more, see the Azure AD Authentication Library (ADAL).

``` java
    class MsipcAuthenticationCallback implements AuthenticationRequestCallback
    {

    …

    @Override
    public void getToken(Map<String, String> authenticationParametersMap,
                         final AuthenticationCompletionCallback authenticationCompletionCallbackToMsipc)
    {
        String authority = authenticationParametersMap.get("oauth2.authority");
        String resource = authenticationParametersMap.get("oauth2.resource");
        String userId = authenticationParametersMap.get("userId");
        final String userHint = (userId == null)? "" : userId;
        AuthenticationContext authenticationContext = App.getInstance().getAuthenticationContext();
        if (authenticationContext == null || !authenticationContext.getAuthority().equalsIgnoreCase(authority))
        {
            try
            {
                authenticationContext = new AuthenticationContext(App.getInstance().getApplicationContext(), authority, …);
                App.getInstance().setAuthenticationContext(authenticationContext);
            }
            catch (NoSuchAlgorithmException e)
            {
                …
                authenticationCompletionCallbackToMsipc.onFailure();
            }
            catch (NoSuchPaddingException e)
            {
                …
                authenticationCompletionCallbackToMsipc.onFailure();
            }
       }
        App.getInstance().getAuthenticationContext().acquireToken(mParentActivity, resource, mClientId, mRedirectURI, userId, mPromptBehavior,
                       "&USERNAME=" + userHint, new AuthenticationCallback<AuthenticationResult>()
                        {
                            @Override
                            public void onError(Exception exc)
                            {
                                …
                                if (exc instanceof AuthenticationCancelError)
                                {
                                     …
                                    authenticationCompletionCallbackToMsipc.onCancel();
                                }
                                else
                                {
                                     …
                                    authenticationCompletionCallbackToMsipc.onFailure();
                                }
                            }

                            @Override
                            public void onSuccess(AuthenticationResult result)
                            {
                                …
                                if (result == null || result.getAccessToken() == null
                                        || result.getAccessToken().isEmpty())
                                {
                                     …
                                }
                                else
                                {
                                    // request is successful
                                    …
                                    authenticationCompletionCallbackToMsipc.onSuccess(result.getAccessToken());
                                }
                            }
                        }

                        );
                  }
```
  • Krok 3: Kontrola, jestli pro tohoto uživatele existují práva pro úpravy tohoto obsahu prostřednictvím metody UserPolicy.accessCheckStep 3: Check if the Edit right exists for this user with this content via the UserPolicy.accessCheck method.

    Zdroj: TextEditorFragment.javaSource: TextEditorFragment.java

         //check if user has edit rights and apply enforcements
                if (!mUserPolicy.accessCheck(EditableDocumentRights.Edit))
                {
                    mTextEditor.setFocusableInTouchMode(false);
                    mTextEditor.setFocusable(false);
                    mTextEditor.setEnabled(false);
                    …
                }
    

Scénář: Vytvoření nového chráněného souboru pomocí šablonyScenario: Create a new protected file using a template

Tento scénář začíná získáním seznamu šablon a výběrem první z nich pro vytvoření zásady a pak se vytvoří nový chráněný soubor a zapíše se do něj.This scenario begins with getting a list of templates, selecting the first one to create a policy, then creates and writes to the new protected file.

  • Krok 1: Získání seznamu šablon prostřednictvím objektu TemplateDescriptorStep 1: Get list of templates via a TemplateDescriptor object.

    Source: MsipcTaskFragment.javaSource: MsipcTaskFragment.java

    CreationCallback<List<TemplateDescriptor>> getTemplatesCreationCallback = new CreationCallback<List<TemplateDescriptor>>()
      {
          @Override
          public Context getContext()
          {
              …
          }
    
          @Override
          public void onCancel()
          {
              …
          }
    
          @Override
          public void onFailure(ProtectionException e)
          {
              …
          }
    
          @Override
          public void onSuccess(List<TemplateDescriptor> templateDescriptors)
          {
             …
          }
      };
      try
      {
              …
          mIAsyncControl = TemplateDescriptor.getTemplates(emailId, mRmsAuthCallback, getTemplatesCreationCallback);
      }
      catch (com.microsoft.rightsmanagement.exceptions.InvalidParameterException e)
      {
              …
      }
    
  • Krok 2: Vytvoření třídy UserPolicy pomocí první šablony v seznamuStep 2: Create a UserPolicy using the first template in the list.

    Source: MsipcTaskFragment.javaSource: MsipcTaskFragment.java

      CreationCallback<UserPolicy> userPolicyCreationCallback = new CreationCallback<UserPolicy>()
      {
          @Override
          public Context getContext()
          {
              …
          }
    
          @Override
          public void onCancel()
          {
              …
          }
    
          @Override
          public void onFailure(ProtectionException e)
          {
              …
          }
    
          @Override
          public void onSuccess(final UserPolicy item)
          {
              …
          }
      };
      try
      {
           …
          mIAsyncControl = UserPolicy.create((TemplateDescriptor)selectedDescriptor, mEmailId, mRmsAuthCallback,
                            UserPolicyCreationFlags.NONE, userPolicyCreationCallback);
           …
      }
      catch (InvalidParameterException e)
      {
              …
      }
    
  • Krok 3: Vytvoření metody ProtectedFileOutputStream a zápis obsahu do této metodyStep 3: Create a ProtectedFileOutputStream and write content to it.

    Source: MsipcTaskFragment.javaSource: MsipcTaskFragment.java

    private void createPTxt(final byte[] contentToProtect)
        {
             …
            CreationCallback<ProtectedFileOutputStream> protectedFileOutputStreamCreationCallback = new CreationCallback<ProtectedFileOutputStream>()
            {
                @Override
                public Context getContext()
                {
                 …
                }
    
                @Override
                public void onCancel()
                {
                 …
                }
    
                @Override
                public void onFailure(ProtectionException e)
                {
                 …
                }
    
                @Override
                public void onSuccess(ProtectedFileOutputStream protectedFileOutputStream)
                {
                    try
                    {
                        // write to this stream
                        protectedFileOutputStream.write(contentToProtect);
                        protectedFileOutputStream.flush();
                        protectedFileOutputStream.close();
                        …
                    }
                    catch (IOException e)
                    {
                        …
                    }
                }
            };
            try
            {
                File file = new File(filePath);
                outputStream = new FileOutputStream(file);
                mIAsyncControl = ProtectedFileOutputStream.create(outputStream, mUserPolicy, originalFileExtension,
                        protectedFileOutputStreamCreationCallback);
            }
            catch (FileNotFoundException e)
            {
                 …
            }
            catch (InvalidParameterException e)
            {
                 …
            }
        }
    

Scénář: Otevření vlastního chráněného souboruScenario: Open a custom protected file

  • Krok 1: Vytvoření UserPolicy na základě serializedContentPolicyStep 1: Create a UserPolicy from a serializedContentPolicy.

    Source: MsipcTaskFragment.javaSource: MsipcTaskFragment.java

    CreationCallback<UserPolicy> userPolicyCreationCallbackFromSerializedContentPolicy = new CreationCallback<UserPolicy>()
            {
                @Override
                public void onSuccess(UserPolicy userPolicy)
                {
                  …
                }
    
                @Override
                public void onFailure(ProtectionException e)
                {
                  …
                }
    
                @Override
                public void onCancel()
                {
                  …
                }
    
                @Override
                public Context getContext()
                {
                  …
                }
            };
    
    
try
{
  ...

  // Read the serializedContentPolicyLength from the inputStream.
  long serializedContentPolicyLength = readUnsignedInt(inputStream);

  // Read the PL bytes from the input stream using the PL size.
  byte[] serializedContentPolicy = new byte[(int)serializedContentPolicyLength];
  inputStream.read(serializedContentPolicy);

  ...

  UserPolicy.acquire(serializedContentPolicy, null, mRmsAuthCallback, PolicyAcquisitionFlags.NONE,
          userPolicyCreationCallbackFromSerializedContentPolicy);
}
catch (com.microsoft.rightsmanagement.exceptions.InvalidParameterException e)
{
  ...
}
catch (IOException e)
{
  ...
}
```
  • Krok 2: Vytvoření metody CustomProtectedInputStream pomocí UserPolicy z kroku 1Step 2: Create a CustomProtectedInputStream using the UserPolicy from Step 1.

    Source: MsipcTaskFragment.javaSource: MsipcTaskFragment.java

      CreationCallback<CustomProtectedInputStream> customProtectedInputStreamCreationCallback = new CreationCallback<CustomProtectedInputStream>()
      {
         @Override
         public Context getContext()
         {
             …
         }
    
         @Override
         public void onCancel()
         {
             …
         }
    
         @Override
         public void onFailure(ProtectionException e)
         {
             …
         }
    
         @Override
         public void onSuccess(CustomProtectedInputStream customProtectedInputStream)
         {
            …
    
             byte[] dataChunk = new byte[16384];
             try
             {
                 while ((nRead = customProtectedInputStream.read(dataChunk, 0, dataChunk.length)) != -1)
                 {
                      …
                 }
                  …
                 customProtectedInputStream.close();
             }
             catch (IOException e)
             {
                …
             }
             …
         }
     };
    
    try
    {
      ...
    
      // Retrieve the encrypted content size.
      long encryptedContentLength = readUnsignedInt(inputStream);
    
      updateTaskStatus(new TaskStatus(TaskState.Starting, "Consuming content", true));
    
      CustomProtectedInputStream.create(userPolicy, inputStream,
                                     encryptedContentLength,
                                     customProtectedInputStreamCreationCallback);
    }
    catch (com.microsoft.rightsmanagement.exceptions.InvalidParameterException e)
    {
      ...
    }
    catch (IOException e)
    {
      ...
    }
    
  • Krok 3: Načtení obsahu z CustomProtectedInputStream do mDecryptedContent a zavřeníStep 3: Read content from the CustomProtectedInputStream into mDecryptedContent then close.

    Source: MsipcTaskFragment.javaSource: MsipcTaskFragment.java

    @Override
    public void onSuccess(CustomProtectedInputStream customProtectedInputStream)
    {
      mUserPolicy = customProtectedInputStream.getUserPolicy();
      ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    
      int nRead;                      
      byte[] dataChunk = new byte[16384];
    
      try
      {
        while ((nRead = customProtectedInputStream.read(dataChunk, 0,
                                                            dataChunk.length)) != -1)
        {
           buffer.write(dataChunk, 0, nRead);
        }
    
        buffer.flush();
        mDecryptedContent = new String(buffer.toByteArray(), Charset.forName("UTF-8"));
    
        buffer.close();
        customProtectedInputStream.close();
      }
      catch (IOException e)
      {
        ...
      }
    }
    

Scénář: Vytvoření vlastního chráněného souboru pomocí vlastních zásadScenario: Create a custom protected file using a custom policy

  • Krok 1: Vytvoření popisu zásad s e-mailovou adresou, kterou poskytl uživatelStep 1: With an email address provided by the user, create a policy descriptor.

    Source: MsipcTaskFragment.javaSource: MsipcTaskFragment.java

    Popis: V praxi by se následující objekty vytvořily s použitím uživatelského vstupu z rozhraní zařízení; UserRights a PolicyDescriptor.Description: In practice, the following objects would be created by using user inputs from the device interface; UserRights and PolicyDescriptor.

      // create userRights list
      UserRights userRights = new UserRights(Arrays.asList("consumer@domain.com"),
        Arrays.asList( CommonRights.View, EditableDocumentRights.Print));
      ArrayList<UserRights> usersRigthsList = new ArrayList<UserRights>();
      usersRigthsList.add(userRights);
    
      // Create PolicyDescriptor using userRights list
      PolicyDescriptor policyDescriptor = PolicyDescriptor.createPolicyDescriptorFromUserRights(
                                                             usersRigthsList);
      policyDescriptor.setOfflineCacheLifetimeInDays(10);
      policyDescriptor.setContentValidUntil(new Date());
    
  • Krok 2: Vytvoření vlastní třídy UserPolicy z popisu zásad selectedDescriptorStep 2: Create a custom UserPolicy from the policy descriptor, selectedDescriptor.

    Source: MsipcTaskFragment.javaSource: MsipcTaskFragment.java

       mIAsyncControl = UserPolicy.create((PolicyDescriptor)selectedDescriptor,
         mEmailId, mRmsAuthCallback, UserPolicyCreationFlags.NONE, userPolicyCreationCallback);
    
  • Krok 3: Vytvoření a zápis obsahu do objektu CustomProtectedOutputStream a pak zavřeníStep 3: Create and write content to the CustomProtectedOutputStream and then close.

    Source: MsipcTaskFragment.javaSource: MsipcTaskFragment.java

    File file = new File(filePath);
        final OutputStream outputStream = new FileOutputStream(file);
        CreationCallback<CustomProtectedOutputStream> customProtectedOutputStreamCreationCallback = new CreationCallback<CustomProtectedOutputStream>()
        {
            @Override
            public Context getContext()
            {
              …
            }
    
            @Override
            public void onCancel()
            {
              …
            }
    
            @Override
            public void onFailure(ProtectionException e)
            {
              …
            }
    
            @Override
            public void onSuccess(CustomProtectedOutputStream protectedOutputStream)
            {
                try
                {
                    // write serializedContentPolicy
                    byte[] serializedContentPolicy = mUserPolicy.getSerializedContentPolicy();
                    writeLongAsUnsignedIntToStream(outputStream, serializedContentPolicy.length);
                    outputStream.write(serializedContentPolicy);
                    // write encrypted content
                    if (contentToProtect != null)
                    {
                        writeLongAsUnsignedIntToStream(outputStream,
                                CustomProtectedOutputStream.getEncryptedContentLength(contentToProtect.length,
                                        protectedOutputStream.getUserPolicy()));
                        protectedOutputStream.write(contentToProtect);
                        protectedOutputStream.flush();
                        protectedOutputStream.close();
                    }
                    else
                    {
                        outputStream.flush();
                        outputStream.close();
                    }
                    …
                }
                catch (IOException e)
                {
                  …
                }
            }
        };
        try
        {
            mIAsyncControl = CustomProtectedOutputStream.create(outputStream, mUserPolicy,
                    customProtectedOutputStreamCreationCallback);
        }
        catch (InvalidParameterException e)
        {
          …
        }
    

KomentářeComments

Před přidáním komentáře se podívejte na naše pravidla organizace.Before commenting, we ask that you review our House rules.