Ciao Jokel
Vielleicht kannst du mir weiter helfen. Ich habe mich mal im Internet umgeschaut und eine Lösung mit einem Launcher gefunden. Aber mit diesem Code werden die Rechte nicht mehr aufgerufen und die App einfach gestartet.
package ch.robbisoft.klassennotfall
import android.Manifest
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.widget.Toolbar
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.view.get
import androidx.preference.PreferenceManager
import androidx.viewpager2.widget.ViewPager2
import ch.robbisoft.klassennotfall.databinding.ActivityMainBinding
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
private val TAG = MainActivity::class.simpleName
class MainActivity : AppCompatActivity(), View.OnClickListener {
var rechte = arrayOf(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
)
private var str_text: String? = null
private lateinit var binding : ActivityMainBinding
private lateinit var tabs : TabLayout
private lateinit var page : ViewPager2
private lateinit var toolbar: Toolbar
private lateinit var ctx : Context
private lateinit var ac_ctx : Context
private lateinit var klassnama : String
private lateinit var klassnamb : String
private lateinit var klassnamc : String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
ctx = applicationContext
ac_ctx = this
val prefs = PreferenceManager.getDefaultSharedPreferences(ac_ctx)
if(!prefs.contains("key_eins")){
val prefvalue = prefs.edit()
klassnama = getString(R.string.lbl_tab_eins)
klassnamb = getString(R.string.lbl_tab_zwei)
klassnamc = getString(R.string.lbl_tab_drei)
prefvalue.putString("key_eins", klassnama)
prefvalue.putString("key_zwei", klassnamb)
prefvalue.putString("key_drei", klassnamc)
prefvalue.apply()
prefvalue.commit()
}else{
klassnama = prefs.getString("key_eins", null).toString()
klassnamb = prefs.getString("key_zwei", null).toString()
klassnamc = prefs.getString("key_drei", null).toString()
}
val KlassArray = arrayOf<String>(
klassnama,
klassnamb,
klassnamc
)
toolbar = binding.tobBar
setSupportActionBar(toolbar)
toolbar.inflateMenu(R.menu.menu_main)
tabs = binding.tabLaytop
page = binding.laySeite
tabs.addTab(tabs.newTab().setText(klassnama))
tabs.addTab(tabs.newTab().setText(klassnamb))
tabs.addTab(tabs.newTab().setText(klassnamc))
tabs.tabGravity = TabLayout.GRAVITY_FILL
val adapter = MyAdapter(supportFragmentManager, lifecycle)
adapter.counter = tabs.tabCount
page.adapter = adapter
TabLayoutMediator(tabs, page) { tab, position ->
tab.text = KlassArray[position].toString()
}.attach()
tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener{
override fun onTabSelected(tab: TabLayout.Tab?) {
if (tab != null) {
page.currentItem = tab.position
}
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
override fun onTabReselected(tab: TabLayout.Tab?) {
}
})
page.setOnClickListener {
val objekt = it as TextView
val text = objekt.text.toString()
Log.d(TAG, text)
}
page.setOnContextClickListener(View.OnContextClickListener { v : View ->
val objekt = v as TextView
val text = objekt.text.toString()
Log.d(TAG, text)
return@OnContextClickListener true
})
//prüft ob OS Version > 6 ist, denn vorher kann nicht geprüft werden
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //prüfen ob Rechte vorhanden sind
// if (pruefrechte()) {
// str_text = getString(R.string.lbl_recht_neu)
// Toast.makeText(ctx, str_text, Toast.LENGTH_SHORT).show()
// //Code für die Initialisierung
// } else {
// str_text = getString(R.string.lbl_recht_fasch)
// Toast.makeText(ctx, str_text, Toast.LENGTH_SHORT).show()
// finish()
// }
// } else {
// str_text = getString(R.string.lbl_recht_alt)
// Toast.makeText(ctx, str_text, Toast.LENGTH_SHORT).show()
// }
}
private val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()){ isGranted : Boolean ->
if(isGranted){
str_text = getString(R.string.lbl_recht_neu)
Toast.makeText(ctx, str_text, Toast.LENGTH_SHORT).show()
}else{
str_text = getString(R.string.lbl_recht_fasch)
Toast.makeText(ctx, str_text, Toast.LENGTH_SHORT).show()
}
}
fun onClickRequestPermission( iew : View){
var result : Int
val listPermissionsNeeded : MutableList<String> = ArrayList<String>()
for( p in rechte ){
result = ContextCompat.checkSelfPermission(this, p)
if(result != PackageManager.PERMISSION_GRANTED){
listPermissionsNeeded.add(p)
}
}
if( !listPermissionsNeeded.isEmpty() ){
ActivityCompat.requestPermissions(this, (listPermissionsNeeded.toTypedArray() as Array<String?>, MULTIPLE_PERMISSIONS)
}
}
private fun pruefrechte(): Boolean {
var result: Int
val listPermissionsNeeded: MutableList<String> = ArrayList<String>()
for (p in rechte) {
result = ContextCompat.checkSelfPermission(this, p)
if (result != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add((p))
}
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, (listPermissionsNeeded.toTypedArray() as Array<String?>, MULTIPLE_PERMISSIONS)
// keine permissions gesetzt
return false
}
// alle permissions gesetzt
return true
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
MULTIPLE_PERMISSIONS -> {
if (grantResults.size > 0) {
var permissionsDenied = ""
for (per in permissions) {
if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
permissionsDenied += "\n" + per
}
}
// Nach dem ersten Male
}
return
}
}
}
companion object {
const val MULTIPLE_PERMISSIONS = 99
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
return super.onCreateOptionsMenu(menu)
}
override fun onClick(v: View?) {
var objekt = v as TextView
var text = objekt.text.toString()
Log.d(TAG, "->MainActivity " + text)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val was = item.itemId
return when(was){
// R.id.mnu_add -> {
// val intent = Intent(ac_ctx, PersonIn::class.java)
// persinHorcher.launch(intent)
// return true
// }
// R.id.mnu_save -> {
// return true
// }
R.id.mnu_optionen -> {
val intent = Intent(ac_ctx, SettingsActivity::class.java)
OptionenHorcher.launch(intent)
return true
}
else -> super.onOptionsItemSelected(item)
}
}
var OptionenHorcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result ->
if(result.resultCode == Activity.RESULT_OK){
val prefs = PreferenceManager.getDefaultSharedPreferences(ac_ctx)
klassnama = prefs.getString("key_eins", null).toString()
klassnamb = prefs.getString("key_zwei", null).toString()
klassnamc = prefs.getString("key_drei", null).toString()
var page : TabLayout.Tab
page = tabs.getTabAt(0)!!
page.setText(klassnama)
page = tabs.getTabAt(1)!!
page.setText(klassnamb)
page = tabs.getTabAt(2)!!
page.setText(klassnamc)
}
}
//Person hinzufügen
var persinHorcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result ->
if (result.resultCode == Activity.RESULT_OK){
if (result.data != null){
val data : Intent? = result.data
var pers = Person()
pers.pname = data!!.getStringExtra("name").toString()
pers.telmutter = data.getStringExtra("mutter").toString()
pers.telvater = data.getStringExtra("vater").toString()
pers.telalg = data.getStringExtra("allg").toString()
}
}
}
override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
return super.onPrepareOptionsMenu(menu)
}
}
Vielleicht sieht jemand wo das Problem ist. Ich komme auf jeden Fall nicht mehr weiter.
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.