打开 RMS 保护文档
本文介绍如何在 Android 端打开 Microsoft Rights Management(RMS)保护的 PDF 文档,以及实现该能力所需的依赖与回调转发要点。
以下步骤建立在"基础阅读器(PDFViewCtrl)"的实现之上:先完成基础的 PDFViewCtrl 文档打开流程,再配置 RMS 所需的 UI 关联与回调转发。
前置条件
已完成 SDK 集成与授权初始化。
参考:集成 SDK
已基于
PDFViewCtrl完成基础阅读器搭建。
关键步骤
步骤 1:引入 RMS 相关依赖
在工程中引入 RMS 相关依赖。
步骤 2:打开文档前设置关联 Activity
打开 RMS 保护文档时会涉及 UI 交互(如登录弹窗),需要在打开文档前设置关联 Activity:
java
pdfViewCtrl.setAttachedActivity(activity);
步骤 3:在 onActivityResult() 中转发结果
在 onActivityResult() 中调用 pdfViewCtrl.handleActivityResult(),将 RMS 登录等流程的回调结果转发给 SDK:
java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
pdfViewCtrl.handleActivityResult(requestCode, resultCode, data);
}
提示
请确保已将 RMS 保护文档(例如 Sample_RMS.pdf)放入设备/模拟器的 FoxitSDK 目录中。
参考实现
下面示例代码基于 构建一个功能基础的 PDF 阅读器(PDFViewCtrl) 的 MainActivity.java 进行增量修改,核心变化:
- 在打开文档前调用
pdfViewCtrl.setAttachedActivity(this) - 在
onActivityResult()中将回调转发给pdfViewCtrl.handleActivityResult()
[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);
}
}
}
}