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);
            }
        }
    }
}