Skip to content

Open RMS-Protected Documents ​

This guide explains how to open Microsoft Rights Management (RMS) protected PDF documents on Android, including required dependencies and callback forwarding.

The steps build on the Basic PDF Reader (PDFViewCtrl): complete the basic PDFViewCtrl open flow first, then add RMS UI association and callback forwarding.

Prerequisites ​

  1. SDK integration and license initialization are complete.

    See Integrate the SDK

  2. A basic reader based on PDFViewCtrl is in place.

    See Build a Basic PDF Reader (PDFViewCtrl)

Key Steps ​

Step 1: Add RMS Dependencies ​

Add RMS-related dependencies to your project.

See Integrate the SDK — Optional dependencies

Step 2: Set Attached Activity Before Open ​

Opening RMS-protected documents may show UI (such as sign-in). Set the attached Activity before open:

java
pdfViewCtrl.setAttachedActivity(activity);

Step 3: Forward Results in onActivityResult() ​

Forward RMS sign-in and related callbacks to the SDK:

java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    pdfViewCtrl.handleActivityResult(requestCode, resultCode, data);
}

NOTE

Ensure an RMS-protected document (for example Sample_RMS.pdf) is in the FoxitSDK directory on the device or emulator.

Reference Implementation ​

The example below extends Build a Basic PDF Reader (PDFViewCtrl) MainActivity.java with:

  • pdfViewCtrl.setAttachedActivity(this) before open
  • pdfViewCtrl.handleActivityResult() in onActivityResult()
[MainActivity.java]
java
package com.foxit.pdfreader;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.annotation.NonNull;

import com.foxit.sdk.PDFViewCtrl;
import com.foxit.sdk.common.Constants;
import com.foxit.sdk.common.Library;

public class MainActivity extends AppCompatActivity {

    private PDFViewCtrl pdfViewCtrl = null;
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static final int REQUEST_ALL_FILES_ACCESS_PERMISSION = 222;
    private static final String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };

    // sn 和 key 的值分别来自 SDK 包中的 rdk_sn.txt 和 rdk_key.txt
    private static String sn = " ";
    private static String key = " ";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 初始化 SDK
        int errorCode = Library.initialize(sn, key);
        if (errorCode != Constants.e_ErrSuccess)
            return;

        // 初始化 PDFViewCtrl
        pdfViewCtrl = new PDFViewCtrl(this);
        setContentView(pdfViewCtrl);

        // 设置关联 Activity,用于 RMS 登录等 UI 交互
        pdfViewCtrl.setAttachedActivity(this);

        // 请求文件访问权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            if (!Environment.isExternalStorageManager()) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                intent.setData(Uri.parse("package:" + getApplicationContext().getPackageName()));
                startActivityForResult(intent, REQUEST_ALL_FILES_ACCESS_PERMISSION);
                return;
            }
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            int permission = ContextCompat.checkSelfPermission(this.getApplicationContext(),
                    Manifest.permission.WRITE_EXTERNAL_STORAGE);
            if (permission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
                return;
            }
        }

        // 打开 RMS 保护文档
        String path = Environment.getExternalStorageDirectory().getPath()
                + "/FoxitSDK/Sample_RMS.pdf";
        pdfViewCtrl.openDoc(path, null);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
            @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_EXTERNAL_STORAGE
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            String path = Environment.getExternalStorageDirectory().getPath()
                    + "/FoxitSDK/Sample_RMS.pdf";
            pdfViewCtrl.openDoc(path, null);
        } else {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_ALL_FILES_ACCESS_PERMISSION) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                if (Environment.isExternalStorageManager()) {
                    String path = Environment.getExternalStorageDirectory().getPath()
                            + "/FoxitSDK/Sample_RMS.pdf";
                    pdfViewCtrl.openDoc(path, null);
                }
            }
        } else {
            // 将 RMS 登录等回调结果转发给 PDFViewCtrl
            if (pdfViewCtrl != null) {
                pdfViewCtrl.handleActivityResult(requestCode, resultCode, data);
            }
        }
    }
}