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
SDK integration and license initialization are complete.
A basic reader based on
PDFViewCtrlis in place.
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 openpdfViewCtrl.handleActivityResult()inonActivityResult()
[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);
}
}
}
}