管理中心
我的

SettingController

展开

Class Info

public class SettingController

提供设置相关功能。

Public Method Summary

展开

Qualifier and Type

Method Name and Description

Task<DataType>

addDataType(DataTypeAddOptions options)

创建并添加自定义数据类型。

Task<Void>

disableHiHealth()

禁用Health Service Kit功能。

Task<Boolean>

getHealthAppAuthorization()

查询运动健康应用隐私管理是否关联Health Service Kit。

HealthKitAuthResult

parseHealthKitAuthResultFromIntent(Intent intent)

从登录授权流程返回的Intent中解析授权结果。

Task<DataType>

readDataType(String dataTypeName)

根据数据类型名称读取对应的自定义数据类型。

Intent

requestAuthorizationIntent(String[] scopes, boolean enableHealthAuth)

获取集成华为账号授权和华为运动健康App授权流程的Intent,可以通过startActivityForResult拉起授权流程页面。

Public Methods

addDataType(DataTypeAddOptions options)

展开

Method

public Task<DataType> addDataType(DataTypeAddOptions options)

创建并添加一个自定义数据类型。新创建的数据类型名称必须以应用程序的包名作为前缀,否则将会创建失败。

Parameters

展开

Name

Description

options

创建新数据类型的请求选项。

Returns

展开

Type

Description

Task<DataType>

创建并添加一个自定义数据类型。

创建并添加一个自定义数据类型的示例代码如下:
Java
Kotlin
public void addNewDataType(View view) {
    // 新增的名字必须以包名开始,以自定义名字结尾
    String dataTypeName = "com.myproject.demo";

    // 创建需要添加的字段值
    Field selectedField = Field.newDoubleField("myField");
    // 创建一个DataTypeAddOptions
    DataTypeAddOptions dataTypeAddOptions =
        new DataTypeAddOptions.Builder().setName(dataTypeName).addField(selectedField).build();

    // 添加新的数据类型
    // 返回的结果显示在手机屏幕上
    // 请注意此处的this为Activity对象
    HuaweiHiHealth.getSettingController(this)
        .addDataType(dataTypeAddOptions)
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                Log.i("TAG", "Add dataType failed");
            }
        })
        .addOnCompleteListener(new OnCompleteListener<DataType>() {
            @Override
            public void onComplete(Task<DataType> task) {
                String res = task.isSuccessful() ? "success" : "failed";
                Log.i("TAG", "Add dataType " + res);
                if (task.getException() != null) {
                    Log.i("TAG", "GetException is " + task.getException().toString());
                }
            }
        });
}
fun addNewDataType(view: View) {
    // 新增的名字必须以包名开始,以自定义名字结尾
    val dataTypeName = "com.myproject.demo"
    // 创建需要添加的字段值
    val selectedField = Field.newDoubleField("myField")
    // 创建一个DataTypeAddOptions
    
    val dataTypeAddOptions =
        DataTypeAddOptions.Builder().setName(dataTypeName).addField(selectedField).build()

    // 创建需要添加的域并添加新的数据类型
    // 返回的结果显示在手机屏幕上
    // 请注意此处的this为Activity对象
    HuaweiHiHealth.getSettingController(this).addDataType(dataTypeAddOptions)
        .addOnFailureListener { e -> printFailureMessage(e, "addNewDataType") }
        .addOnCompleteListener { task ->
            val res = if (task.isSuccessful) "success" else "failed"
            Log.i("TAG","add dataType of $selectedFieldStr is $res")
            if (task.exception != null) {
                Log.i("TAG","getException is " + task.exception.toString())
            }
        }
    }
}

disableHiHealth()

展开

Method

public Task<Void> disableHiHealth()

禁用Health Service Kit功能,取消用户授权(24小时后生效),删除所有数据记录。

Returns

展开

Type

Description

Task<Void>

用来检查请求是否成功、失败、已完成的Task对象。

禁用Health Service Kit功能的示例代码如下:
Java
Kotlin
public void disableHiHealth(View view) {
    // 取消所有记录
    // 返回的结果显示在手机屏幕上
    // 请注意此处的this为Activity对象
    HuaweiHiHealth.getSettingController(this)
        .disableHiHealth()
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                Log.i("TAG", "Disable AutoRecorder failed");
            }
        })
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(Task<Void> task) {
                String res = task.isSuccessful() ? "success" : "failed";
                Log.i("TAG", "Disable AutoRecorder is " + res);
            }
        });
}
fun disableHiHealth(view: View) {
    // 取消所有记录
    // 返回的结果显示在手机屏幕上
    // 请注意此处的this为Activity对象
    HuaweiHiHealth.getSettingController(this).disableHiHealth()
        .addOnFailureListener { e -> printFailureMessage(e, "readTodaySummationFromDevice") }
        .addOnCompleteListener { task ->
            val res = if (task.isSuccessful) "success" else "failed"
            Log.i("TAG","disableHiHealth is $res")
        }
    }
}

readDataType(String dataTypeName)

展开

Method

public Task<DataType> readDataType(String dataTypeName)

根据数据类型名称读取数据类型,用于读取应用程序自定义的数据类型。

Parameters

展开

Name

Description

dataTypeName

数据类型的名称。

Returns

展开

Type

Description

Task<DataType>

根据数据类型名称读取数据类型。

根据数据类型名称读取数据类型的示例代码如下:
Java
Kotlin
public void readDataType(View view) {
    // 获取数据类型的名字
    String dataTypeName = "com.myproject.demo";
    // 获取指定名字的数据类型
    // 返回的结果显示在手机屏幕上
    // 请注意此处的this为Activity对象
    HuaweiHiHealth.getSettingController(this)
        .readDataType(dataTypeName)
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                Log.i("TAG", "Read dataType failed");
            }
        })
        .addOnCompleteListener(new OnCompleteListener<DataType>() {
            @Override
            public void onComplete(Task<DataType> task) {
                Log.i("TAG", "DataType : " + task.getResult());
            }
        });
}
fun readDataType(view: View) {
    // 获取数据类型的名字
    val dataTypeName = "com.myproject.demo"
    // 获取指定名字的数据类型
    // 返回的结果显示在手机屏幕上
    // 请注意此处的this为Activity对象
    HuaweiHiHealth.getSettingController(this).readDataType(dataTypeName)
        .addOnFailureListener { e -> printFailureMessage(e, "readDataType") }
        .addOnCompleteListener { task -> Log.i("TAG","DataType : " + task.result) }
    }
}

getHealthAppAuthorization()

展开

Method

public Task<Boolean> getHealthAppAuthorization()

查询运动健康应用隐私管理是否关联Health Service Kit。

Returns

展开

Type

Description

Task<Boolean>

用户运动健康应用隐私授权到Health Service Kit的授权情况。

  • true:已授权
  • false:未授权
查询用户运动健康应用隐私授权到Health Service Kit的授权情况的示例代码:
Java
Kotlin
public void getHealthAppAuthorization(View view) {
    // 查询运动健康应用隐私管理是否关联Health Service Kit
    // 返回的结果显示在手机屏幕上
    // 请注意此处的this为Activity对象
    HuaweiHiHealth.getSettingController(this)
        .getHealthAppAuthorization()
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                Log.i("TAG", "getHealthAppAuthorization failed");
            }
        })
        .addOnSuccessListener(new OnSuccessListener<Boolean>() {
            @Override
            public void onSuccess(Boolean result) {
                String res = result ? "success" : "failed";
                Log.i("TAG", "getHealthAppAuthorization is " + res);
            }
        });
}
fun getHealthAppAuthorization(view: View) {
    // 查询运动健康应用隐私管理是否关联Health Service Kit
    // 返回的结果显示在手机屏幕上
    // 请注意此处的this为Activity对象
    HuaweiHiHealth.getSettingController(this)
        .getHealthAppAuthorization()        
        .addOnFailureListener { e -> printFailureMessage(e, "getHealthAppAuthorization") }
        .addOnSuccessListener { result ->
            val res = if (result) "success" else "failed"
            Log.i("TAG","getHealthAppAuthorization is $res")
        }
    }
}

requestAuthorizationIntent(String[] scopes, boolean enableHealthAuth)

展开

Method

public Intent requestAuthorizationIntent(String[] scopes, boolean enableHealthAuth)

获取集成华为账号登录授权和华为运动健康App授权流程的Intent,可以通过startActivityForResult拉起授权流程页面。

Parameters

展开

Name

Description

scopes

申请授权的Scope权限数组。

enableHealthAuth

运动健康App授权流程开关,true表示使能运动健康App授权流程,false表示不使能。

Returns

展开

Type

Description

Intent

启动授权流程Activity的Intent,可通过startActivityForResult启动。

Java
Kotlin
// 日志Tag
private static final String TAG = "HealthKitAuthActivity";

// 通过startActivityForResult方式拉起授权流程界面的请求码,具体数值开发者可以自行定义
private static final int REQUEST_AUTH = 1000;

private void requestAuth() {
    // 添加需要申请的权限,这里只是举例说明,开发者需要根据实际情况添加所需的权限
    String[] scopes = new String[] {
        // 查看和存储Health Service Kit中的步数
        Scopes.HEALTHKIT_STEP_READ, Scopes.HEALTHKIT_STEP_WRITE,
        // 查看和存储Health Service Kit中的身高体重
        Scopes.HEALTHKIT_HEIGHTWEIGHT_READ, Scopes.HEALTHKIT_HEIGHTWEIGHT_WRITE,
        // 查看和存储Health Service Kit中的心率数据
        Scopes.HEALTHKIT_HEARTRATE_READ, Scopes.HEALTHKIT_HEARTRATE_WRITE};

    // 获取授权流程Intent,true表示开启运动健康App授权流程,false表示不开启
    // 请注意此处的this为Activity对象
    Intent intent = 
HuaweiHiHealth.getSettingController(this).requestAuthorizationIntent(scopes, true);

    // 打开授权流程页面,此方法必须是在Activity中调用
    Log.i(TAG, "start authorization activity");
    startActivityForResult(intent, REQUEST_AUTH);
}
private fun requestAuth() {
    // 添加需要申请的权限,这里只是举例说明,开发者需要根据实际情况添加所需的权限
    val scopes = arrayOf(
        // 查看和存储Health Service Kit中的步数
        Scopes.HEALTHKIT_STEP_READ, Scopes.HEALTHKIT_STEP_WRITE,
        // 查看和存储Health Service Kit中的身高体重
        Scopes.HEALTHKIT_HEIGHTWEIGHT_READ, Scopes.HEALTHKIT_HEIGHTWEIGHT_WRITE,
        // 查看和存储Health Service Kit中的心率数据
        Scopes.HEALTHKIT_HEARTRATE_READ, Scopes.HEALTHKIT_HEARTRATE_WRITE
    )

    // 获取授权流程Intent
    // 请注意此处的this为Activity对象
    val intent = HuaweiHiHealth.getSettingController(this).requestAuthorizationIntent(scopes, true)

    // 打开授权流程页面
    Log.i(TAG, "start authorization activity");
    startActivityForResult(intent, REQUEST_AUTH)
}

companion object {
    // 日志Tag
    private val TAG = "HealthKitAuthActivity"

    // 通过startActivityForResult方式拉起授权流程界面的请求码,具体数值开发者可以自行定义
    private val REQUEST_AUTH = 1000
}

parseHealthKitAuthResultFromIntent(Intent intent)

展开

Method

public HealthKitAuthResult parseHealthKitAuthResultFromIntent(Intent intent)

从登录授权流程返回的Intent中解析授权结果。

Parameters

展开

Name

Description

intent

登录授权流程返回的Intent。

Returns

展开

Type

Description

HealthKitAuthResult

从Intent中解析出的授权结果。

Java
Kotlin
// 日志Tag
private static final String TAG = "HealthKitAuthActivity";

// 通过startActivityForResult方式拉起授权流程界面的请求码,具体数值开发者可以自行定义
private static final int REQUEST_AUTH = 1000;

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // 只处理授权流程的响应
    if (requestCode == REQUEST_AUTH) {
        // 从intent中获取授权响应结果
        // 请注意此处的this为Activity对象
        HealthKitAuthResult result = HuaweiHiHealth.getSettingController(this).parseHealthKitAuthResultFromIntent(data);
        if (result == null) {
            Log.w(TAG, "authorization fail");
            return;
        }

        if (result.isSuccess()) {
            Log.i(TAG, "authorization success");
        } else {
            Log.w(TAG, "authorization fail, errorCode:" + result.getErrorCode());
        }
    }
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    // 只处理授权流程的响应
    if (requestCode == REQUEST_AUTH) {
        // 从intent中获取授权响应结果
        // 请注意此处的this为Activity对象
        val result = HuaweiHiHealth.getSettingController(this).parseHealthKitAuthResultFromIntent(data)
        if (result == null) {
            Log.w(TAG, "authorization fail")
            return
        }

        if (result.isSuccess) {
            Log.i(TAG, "authorization success")
        } else {
            Log.w(TAG, "authorization fail, errorCode:" + result.errorCode)
        }
    }
}

companion object {
    // 日志Tag
    private val TAG = "HealthKitAuthActivity"

    // 通过startActivityForResult方式拉起授权流程界面的请求码,具体数值开发者可以自行定义
    private val REQUEST_AUTH = 1000
}