Class Info |
|---|
public class SettingController 提供设置相关功能。 |
Qualifier and Type | Method Name and Description |
|---|---|
Task<DataType> | addDataType(DataTypeAddOptions options) 创建并添加自定义数据类型。 |
Task<Void> | 禁用HUAWEI Health Kit功能。 |
Task<DataType> | readDataType(String dataTypeName) 根据数据类型名称读取对应的自定义数据类型。 |
Task<Void> | 检查用户运动健康应用隐私授权到Health Kit的授权情况,若检查失败会跳转到运动健康隐私授权到HealthKit的授权页面。 |
Task<Boolean> | 查询用户运动健康应用隐私授权到Health Kit的授权情况。 |
Intent | requestAuthorizationIntent(String[] scopes, boolean enableHealthAuth) 获取集成华为帐号授权和华为运动健康App授权流程的Intent,可以通过startActivityForResult拉起授权流程页面。 |
HealthKitAuthResult | parseHealthKitAuthResultFromIntent(Intent intent) 从登录授权流程返回的Intent中解析授权结果。 |
Method |
|---|
public Task<DataType> addDataType(DataTypeAddOptions options) 创建并添加一个自定义数据类型。新创建的数据类型名称必须以应用程序的包名作为前缀,否则将会创建失败。 |
Parameters
Name | Description |
|---|---|
options | 创建新数据类型的请求选项。 |
Returns
Type | Description |
|---|---|
Task<DataType> | 创建并添加一个自定义数据类型。 |
“Java”
public void addNewDataType(View view) {
// 从输入框中获取新增数据类型的名字
// 新增的名字必须以包名开始,以自定义名字结尾
String dataTypeName = dataTypeNameView.getText().toString();
// 创建一个DataTypeAddOptions,这里必须指定想添加的域
// 可以添加多个不同的域
HiHealthOptions options = HiHealthOptions.builder().build();
AuthHuaweiId mSignInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(options);
Context context = CoreApplication.getCoreBaseContext().getApplicationContext();
// 创建需要添加的域
Filed selectedField = Field.newFloatField("myField");
DataTypeAddOptions dataTypeAddOptions =
new DataTypeAddOptions.Builder().setName(dataTypeName).addField(selectedField).build();
// 添加新的数据类型
// 返回的结果显示在手机屏幕上
HuaweiHiHealth.getSettingController(getApplicationContext(), mSignInHuaweiId)
.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();
}
}
});
} “Kotlin”
fun addNewDataType(view: View) {
// 从输入框中获取新增数据类型的名字
// 新增的名字必须以包名开始,以自定义名字结尾
val dataTypeName = dataTypeNameView!!.text.toString()
// 创建一个DataTypeAddOptions,这里必须指定想添加的域
// 可以添加多个不同的域
val dataTypeAddOptions =
DataTypeAddOptions.Builder().setName(dataTypeName).addField(selectedField).build()
// 创建需要添加的域并添加新的数据类型
// 返回的结果显示在手机屏幕上
val hiHealthOptions = HiHealthOptions.builder().build()
val signInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(hiHealthOptions)
context!!.let {
HuaweiHiHealth.getSettingController(it, signInHuaweiId )!!.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())
}
}
}
}
直接拷贝使用上述示例代码,会有下面一处报错,错误点和解决办法如下:
解决办法:dataTypeNameView为activity活动中定义的输入框EditText控件,其中data_type_name_text为EditText控件id。开发者可以通过如下方式定义:
“Java”
// activity活动实现类中定义dataTypeNameView变量
private EditText dataTypeNameView;
// activity活动onCreate方法中初始化dataTypeNameView变量
dataTypeNameView = (EditText) findViewById(R.id.data_type_name_text); “Kotlin” // activity活动实现类中定义dataTypeNameView变量 private var dataTypeNameView: EditText? = null // activity活动onCreate方法中初始化dataTypeNameView变量 dataTypeNameView = findViewById(R.id.data_type_name_text)
Method |
|---|
public Task<Void> disableHiHealth() 禁用Health Kit功能,取消用户授权(24小时后生效),删除所有数据记录。 |
“Java”
public void disableHiHealth(View view) {
// 取消所有记录
// 返回的结果显示在手机屏幕上
HiHealthOptions options = HiHealthOptions.builder().build();
AuthHuaweiId mSignInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(options);
Context context = CoreApplication.getCoreBaseContext().getApplicationContext();
HuaweiHiHealth.getSettingController(getApplicationContext(), mSignInHuaweiId)
.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 AutoRecorde is " + res);
}
});
} “Kotlin” fun disableHiHealth(view: View) { // 取消所有记录 // 返回的结果显示在手机屏幕上 val hiHealthOptions = HiHealthOptions.builder().build() val signInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(hiHealthOptions) context!!.let { HuaweiHiHealth.getSettingController(it, signInHuaweiId )!!.disableHiHealth() .addOnFailureListener { e -> printFailureMessage(e, "readTodaySummationFromDevice") } .addOnCompleteListener { task -> val res = if (task.isSuccessful) "success" else "failed" Log.i("TAG","disableHiHealth is $res") } } }
Method |
|---|
public Task<DataType> readDataType(String dataTypeName) 根据数据类型名称读取数据类型,用于读取应用程序自定义的数据类型。 |
Parameters
Name | Description |
|---|---|
dataTypeName | 数据类型的名称。 |
Returns
Type | Description |
|---|---|
Task<DataType> | 根据数据类型名称读取数据类型。 |
“Java”
public void readDataType(View view) {
// 从输入框中获取数据类型的名字
String dataTypeName = dataTypeNameView.getText().toString();
HiHealthOptions options = HiHealthOptions.builder().build();
AuthHuaweiId mSignInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(options);
Context context = CoreApplication.getCoreBaseContext().getApplicationContext();
// 获取指定名字的数据类型
// 返回的结果显示在手机屏幕上
HuaweiHiHealth.getSettingController(getApplicationContext(), mSignInHuaweiId)
.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());
}
});
} “Kotlin” fun readDataType(view: View) { // 从输入框中获取数据类型的名字 val dataTypeName = dataTypeNameView!!.text.toString() // 获取指定名字的数据类型 // 返回的结果显示在手机屏幕上 val hiHealthOptions = HiHealthOptions.builder().build() val signInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(hiHealthOptions) context!!.let { HuaweiHiHealth.getSettingController(it, signInHuaweiId )!!.readDataType(dataTypeName) .addOnFailureListener { e -> printFailureMessage(e, "readDataType") } .addOnCompleteListener { task -> Log.i("TAG","DataType : " + task.result) } } }
Method |
|---|
public Task<Void> checkHealthAppAuthorization() 检查用户运动健康应用隐私授权到Health Kit的授权情况。若检查失败会跳转到运动健康隐私授权到Health Kit的授权页面。 |
“Java”
public void checkHealthAppAuthorization(View view) {
// 检查用户运动健康应用隐私授权到HealthKit的授权情况,若检查失败会跳转到运动健康隐私授权到HealthKit的授权页面
// 返回的结果显示在手机屏幕上
HiHealthOptions options = HiHealthOptions.builder().build();
AuthHuaweiId mSignInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(options);
Context context = CoreApplication.getCoreBaseContext().getApplicationContext();
HuaweiHiHealth.getSettingController(getApplicationContext(), mSignInHuaweiId)
.checkHealthAppAuthorization()
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
Log.i("TAG", "checkHealthAppAuthorization failed");
}
})
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.i("TAG", "checkHealthAppAuthorization is " + "success");
}
});
} “Kotlin”
fun checkHealthAppAuthorization(view: View) {
// 检查用户运动健康应用隐私授权到HealthKit的授权情况,若检查失败会跳转到运动健康隐私授权到HealthKit的授权页面
// 返回的结果显示在手机屏幕上
val hiHealthOptions = HiHealthOptions.builder().build()
val signInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(hiHealthOptions)
context!!.let {
HuaweiHiHealth.getSettingController(it, signInHuaweiId )!!
.checkHealthAppAuthorization()
.addOnFailureListener { e -> printFailureMessage(e, "checkHealthAppAuthorization") }
.addOnSuccessListener{
Log.i("TAG","checkHealthAppAuthorization is success")
}
}
} Method |
|---|
public Task<Boolean> getHealthAppAuthorization() 查询用户运动健康应用隐私授权到Health Kit的授权情况。 |
Returns
Type | Description |
|---|---|
Task<Boolean> | 用户运动健康应用隐私授权到Health Kit的授权情况。
|
“Java”
public void getHealthAppAuthorization(View view) {
// 查询用户运动健康应用隐私授权到Health Kit的授权情况
// 返回的结果显示在手机屏幕上
HiHealthOptions options = HiHealthOptions.builder().build();
AuthHuaweiId mSignInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(options);
Context context = CoreApplication.getCoreBaseContext().getApplicationContext();
HuaweiHiHealth.getSettingController(getApplicationContext(), mSignInHuaweiId)
.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);
}
});
} “Kotlin”
fun getHealthAppAuthorization(view: View) {
// 查询用户运动健康应用隐私授权到Health Kit的授权情况
// 返回的结果显示在手机屏幕上
val hiHealthOptions = HiHealthOptions.builder().build()
val signInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(hiHealthOptions)
context!!.let {
HuaweiHiHealth.getSettingController(it, signInHuaweiId )!!
.checkHealthAppAuthorization()
.addOnFailureListener { e -> printFailureMessage(e, "getHealthAppAuthorization") }
.addOnSuccessListener { result ->
val res = if (result) "success" else "failed"
Log.i("TAG","getHealthAppAuthorization is $res")
}
}
} 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”
// 日志Tag
private static final String TAG = "HealthKitAuthActivity";
// 通过startActivityForResult方式拉起授权流程界面的请求码,具体数值开发者可以自行定义
private static final int REQUEST_AUTH = 1000;
private void requestAuth() {
// 添加需要申请的权限,这里只是举例说明,开发者需要根据实际情况添加所需的权限
String[] scopes = new String[] {
// 查看和存储HUAWEI Health Kit中的步数
Scopes.HEALTHKIT_STEP_READ, Scopes.HEALTHKIT_STEP_WRITE,
// 查看和存储HUAWEI Health Kit中的身高体重
Scopes.HEALTHKIT_HEIGHTWEIGHT_READ, Scopes.HEALTHKIT_HEIGHTWEIGHT_WRITE,
// 查看和存储HUAWEI Health Kit中的心率数据
Scopes.HEALTHKIT_HEARTRATE_READ, Scopes.HEALTHKIT_HEARTRATE_WRITE};
// 获取授权流程Intent,true表示开启运动健康App授权流程,false表示不开启
HiHealthOptions options = HiHealthOptions.builder().build();
AuthHuaweiId signInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(options);
Intent intent = HuaweiHiHealth.getSettingController(this, signInHuaweiId).requestAuthorizationIntent(scopes, true);
// 打开授权流程页面,此方法必须是在Activity中调用
Log.i(TAG, "start authorization activity");
startActivityForResult(intent, REQUEST_AUTH);
} “Kotlin”
private fun requestAuth() {
// 添加需要申请的权限,这里只是举例说明,开发者需要根据实际情况添加所需的权限
val scopes = arrayOf(
// 查看和存储HUAWEI Health Kit中的步数
Scopes.HEALTHKIT_STEP_READ, Scopes.HEALTHKIT_STEP_WRITE,
// 查看和存储HUAWEI Health Kit中的身高体重
Scopes.HEALTHKIT_HEIGHTWEIGHT_READ, Scopes.HEALTHKIT_HEIGHTWEIGHT_WRITE,
// 查看和存储HUAWEI Health Kit中的心率数据
Scopes.HEALTHKIT_HEARTRATE_READ, Scopes.HEALTHKIT_HEARTRATE_WRITE
)
// 获取授权流程Intent
val options = HiHealthOptions.builder().build()
val signInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(options)
val intent = HuaweiHiHealth.getSettingController(this, signInHuaweiId).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
} Method |
|---|
public HealthKitAuthResult parseHealthKitAuthResultFromIntent(Intent intent) 从登录授权流程返回的Intent中解析授权结果。 |
Parameters
Name | Description |
|---|---|
Intent | 登录授权流程返回的Intent。 |
Returns
Type | Description |
|---|---|
HealthKitAuthResult | 从Intent中解析出的授权结果。 |
“Java”
// 日志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中获取授权响应结果
HiHealthOptions options = HiHealthOptions.builder().build();
AuthHuaweiId signInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(options);
HealthKitAuthResult result = HuaweiHiHealth.getSettingController(this, signInHuaweiId).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());
}
}
} “Kotlin”
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// 只处理授权流程的响应
if (requestCode == REQUEST_AUTH) {
// 从intent中获取授权响应结果
val options = HiHealthOptions.builder().build()
val signInHuaweiId = HuaweiIdAuthManager.getExtendedAuthResult(options)
val result = HuaweiHiHealth.getSettingController(this, signInHuaweiId).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
}