APPSDK接口调用

1. 初始化AppSDK

在继承Application的自定义类中添加AppSDK初始化接口的调用,参数依次为,上下文环境Context,用户表示customKey,加密密钥encryptKey,初始化状态回调AppSDKCallback。

使用示例:

public void onCreate() {
    super.onCreate();
    String customKey = "NationSkySandbox";
    String encryptKey = "1234";
    int ret = AppSDK.getInstance().init(getApplicationContext(), customKey, encryptKey, new AppSDKCallback() {
        @Override
        public int callback(int verb, String msg, Object obj) {
            return 0;
        }
    });
}

 2. 文件加密

文件加密采用native层hook方式。Application中AppSDK初始化后文件读写操作自动使用透明加解密。上层接口继续使用原接口。

3. 剪切板、截屏控制

在每一个Activity的onCreate方法中添加registerToSandboxService的调用,把当前Activity加入剪切板控制以及截屏控制;

使用示例:

protected void onCreate(Bundle savedInstanceState) {
    AppSDK.getInstance().registerToSandboxService(this);
    super.onCreate(savedInstanceState);
}

4.  数据库加密

数据库加密采用sqlcipher方式。

使用数据库时由继承SQLiteOpenHelper改为继承com.coral.sandbox.AppSDK.CoralSQLiteOpenHelper,其他操作与正常方式一致。

5.  摄像头控制

在使用系统相机应用的 CameraActivity把继承android.app.Acitivity改为继承com.coral.sandbox.AppSDK.CoralCameraActivity。其他方法正常调用。或者在startActivityForResult之前调用getEnableCamera接口判断是否可以使用摄像头。

使用示例:

if (AppSdk.getInstance().getEnableCamera()) {
    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(cameraIntent, CAMERA_REQUEST);
}

使用Camera类API操作摄像头时在native层进行hook操作进行控制,上层接口还是使用原接口。

6. 麦克风控制

麦克风控制可以使用两种方式,一种为提供麦克风控制策略判断接口,在使用麦克风之前开发者主动调用接口判断策略,当策略允许时使用麦克风。另一种为是用AppSDK封装的MediaRecorder、AudioRecord麦克风接口,在封装的接口中判断策略及执行对应的操作。

使用示例:

MediaRecorder mediaRecorder = AppSDK.getInstance().getMediaRecorder();
if (mediaRecorder != null) {
    ChangeTextView("允许使用MediaRecorder麦克风");
} else {
    ChangeTextView("不允许使用MediaRecorder麦克风");
}

 

int bufferSize = AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
AudioRecord audioRecord = AppSDK.getInstance().getAudioRecord(MediaRecorder.AudioSource.MIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
if (audioRecord != null) {
    ChangeTextView("允许使用AudioRecord麦克风");
} else {
    ChangeTextView("不允许使用AudioRecord麦克风");
}

 

7. 数据分享控制

网络分享

数据分享控制可以提供两种方式控制,一种为开发者调用获取数据分享策略,策略允许分享再调用分享接口,另一种为AppSDK封装各个分享SDK统一提供分享接口(此种方法实现难度较大,涉及到各个分享SDK版本接口兼容问题)。

在调用微信、QQ、新浪微博等网络分享SDK接口前,先调用getShareData获取数据分享策略,如果策略允许分享则继续调用分享SDK的API。

boolean shareData = AppSDK.getInstance().getShareData();
if (shareData) {
    //WXAPI,QQSHARE API,SINAWEIBO API
} else {
    //shareData deny
}

 使用  Intent Action 动态分享

例如使用ACTION_VIEW,动态匹配能打开word的应用,需要调用createShareDataIntent接口,过滤掉沙箱外的应用。

createShareDataIntent详见API文档。

public static Intent getWordFileIntent(File file)
{
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Uri uri = Uri.fromFile(file);
    intent.setDataAndType(uri, "application/msword");
    return AppSDK.getInstance().createShareDataIntent(intent);
}

8. 网络控制

网络控制采用native层hook方式。Application中AppSDK初始化后网络的连接等操作会被hook到。上层接口继续使用原接口。