- Forum-Beiträge: 602
12.10.2021, 17:26:20 via Website
12.10.2021 17:26:20 via Website
Hallo zusammen
In meiner App verbinde ich die Objekte vom Layout zur Activity mit ActivityMainbinding
private lateinit var binding: ActivityMainBinding
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
Das funktioniert ohne Probleme.
Nun habe ich die Situation, dass ich zwei Layouts habe aber nur die MainActivity. Nun möchte ich von der MainActivity auf ein Button zugreifen welcher im Layout "no_permission" ist.
Wie muss ich vorgehen, damit ich auf den Button vom Layout "no_permission" zugreifen kann?
MainActivity:
package ch.robbisoft.sensordemo3
import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import ch.robbisoft.sensordemo3.databinding.ActivityMainBinding
private const val PREFERENCES_KEY = "last"
private const val REQUEST_ACTIVITY_RECOGNITION = 123
fun updateSharedPrefs(context: Context?, last : Int){
val edit = getSharedPreferences(context)?.edit()
edit?.putInt(PREFERENCES_KEY, last)
edit?.apply()
}
private fun getSharedPreferences(context: Context?) = context?.getSharedPreferences(MainActivity::class.simpleName, Context.MODE_PRIVATE)
class MainActivity : AppCompatActivity(), SensorEventListener {
private lateinit var binding: ActivityMainBinding
private lateinit var manager: SensorManager
private var sensor : Sensor? = null
private var hasSensor = false
private var last = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
manager = getSystemService(SensorManager::class.java)
}
sensor = manager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
hasSensor = sensor != null
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && checkSelfPermission(Manifest.permission.ACTIVITY_RECOGNITION) != PackageManager.PERMISSION_GRANTED) {
setContentView(R.layout.no_permission)
binding.btnRechte.setOnClickListener {
requestPermissions(
arrayOf(Manifest.permission.ACTIVITY_RECOGNITION),
REQUEST_ACTIVITY_RECOGNITION
)
}
}else{
showStepCounterUi()
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if(requestCode == REQUEST_ACTIVITY_RECOGNITION && grantResults.isEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
showStepCounterUi()
}
}
override fun onSensorChanged(sensorEvent: SensorEvent){
val values = sensorEvent.values
updateSteps(values[0].toInt())
}
override fun onAccuracyChanged(sensor: Sensor?, i : Int){
}
private fun updateSteps(currentSteps : Int){
last = currentSteps
binding.tvAusgabe.text = "{$currentSteps - getLastStoredStepCount()}"
}
private fun getLastStoredStepCount() = getSharedPreferences(this)?.getInt(PREFERENCES_KEY, 0) ?: 0
private fun showStepCounterUi(){
setContentView(R.layout.activity_main)
binding.reset.setOnClickListener {
updateSharedPrefs(this, last)
updateSteps(last)
}
binding.onOff.setOnCheckedChangeListener { buttonView, isChecked ->
if (isChecked){
manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI)
}else{
manager.unregisterListener(this)
}
}
binding.onOff.isEnabled = hasSensor
binding.onOff.isChecked = hasSensor
binding.reset.isEnabled = hasSensor
binding.tvAusgabe.text =getString(
if(!hasSensor){
R.string.no_sensor
}else{
R.string.waiting
}
)
}
}
Activity_main Layout:
<?xml version="1.0" encoding="utf-8"?>
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/lay_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_ausgabe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.325" />
<Button
android:id="@+id/reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="356dp"
android:text="zurücksetzen"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_ausgabe" />
<Button
android:id="@+id/btn_rechte"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/request"
app:layout_constraintBottom_toTopOf="@+id/on_off"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/reset" />
<Switch
android:id="@+id/on_off"
android:layout_width="206dp"
android:layout_height="55dp"
android:text="Einschalten"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.781"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.62" />
no_permission Layout:
<?xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_permission"
android:textAlignment="center"
android:textSize="16pt" />
<Button
android:id="@+id/button_permission"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/request" />
Gruss Renato
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.