Этот код функционирует, как и ожидалось в эмуляторе с использованием pixel 9 API 34 < /em>
, но сбои на Samsung Galaxy A16* (Android 14) при попытке начать намерение с Action Action_manage_Health_permissions < /p>
android.permission.grant_runtime_permissions
Это ошибка? Чего мне не хватает? < /P>
settingsOpenHealthConnect.setOnClickListener(v -> {
Log.d(TAG," settingsOpenHealthConnect.setOnClickListener");
HealthConnectActions healthConnectActions = new HealthConnectActions(this);
healthConnectActions.openSettings();
});
< /code>
import android.content.ContentValues.TAG
import android.content.Context
import android.content.Intent
import android.health.connect.HealthConnectManager
import android.net.Uri
import android.os.Build
import android.util.Log
import androidx.compose.runtime.mutableStateOf
import androidx.core.content.ContextCompat.startActivity
import androidx.health.connect.client.HealthConnectClient
import androidx.health.connect.client.HealthConnectClient.Companion.SDK_AVAILABLE
import androidx.health.connect.client.permission.HealthPermission
import androidx.health.connect.client.records.StepsRecord
import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeoutOrNull
class HealthConnectActions(private val context: Context) {
private val healthConnectClient by lazy { HealthConnectClient.getOrCreate(context) }
fun openSettings() {
val intent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
Intent(HealthConnectManager.ACTION_MANAGE_HEALTH_PERMISSIONS)
.putExtra(
Intent.EXTRA_PACKAGE_NAME,
context.packageName
)
} else {
Intent(
HealthConnectClient.ACTION_HEALTH_CONNECT_SETTINGS
)
}
startActivity(context, intent, null)
}
}
< /code>
< /code>
FATAL EXCEPTION: main
Process: com.health.fitness.exercise, PID: 32757
java.lang.SecurityException: Permission Denial: starting Intent { act=android.health.connect.action.MANAGE_HEALTH_PERMISSIONS flg=0x10000000 cmp=com.google.android.healthconnect.controller/com.android.healthconnect.controller.PermissionControllerEntryPoint (has extras) } from ProcessRecord{e5c41b5 32757:com.health.fitness.exercise/u0a299} (pid=32757, uid=10299) requires android.permission.GRANT_RUNTIME_PERMISSIONS
at android.os.Parcel.createExceptionOrNull(Parcel.java:3069)
at android.os.Parcel.createException(Parcel.java:3053)
at android.os.Parcel.readException(Parcel.java:3036)
at android.os.Parcel.readException(Parcel.java:2978)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3042)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1873)
at android.app.Activity.startActivityForResult(Activity.java:5780)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:712)
at android.app.Activity.startActivityForResult(Activity.java:5738)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:693)
at android.app.Activity.startActivity(Activity.java:6236)
at androidx.core.content.ContextCompat$Api16Impl.startActivity(ContextCompat.java:830)
at androidx.core.content.ContextCompat.startActivity(ContextCompat.java:279)
at com.health.fitness.HealthConnectActions.openSettings(HealthConnectActions.kt:93)
at com.health.fitness.UserAccountSettingsActivity.lambda$onCreate$5$com-health-fitness-UserAccountSettingsActivity(UserAccountSettingsActivity.java:99)
at com.health.fitness.UserAccountSettingsActivity$$ExternalSyntheticLambda6.onClick(D8$$SyntheticClass:0)
at android.view.View.performClick(View.java:8047)
at android.widget.TextView.performClick(TextView.java:17792)
at android.view.View.performClickInternal(View.java:8024)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:31890)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8934)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:588)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.wm.ActivityTaskSupervisor.checkStartAnyActivityPermission(ActivityTaskSupervisor.java:1390)
at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1468)
at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:1073)
at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1985)
at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1844)
Подробнее здесь: https://stackoverflow.com/questions/794 ... p-settings