In some cases, developer might want to close app forcefully.
e.g. App must update to latest version
e.g. App can not run on rooted device
e.g. App doesn't meet the hardware requirement - Gyroscope required.
finishAffinity()
Here is one of the example. Here we're putting a check - if system is rooted, kill the app after showing a dialog.
Utilities/RootChecker.kt
import java.io.File
class RootChecker {
fun isRooted(): Boolean {
return findBinary("su")
}
fun findBinary(binaryName: String): Boolean {
var found = false
if (!found) {
val places = arrayOf(
"/sbin/", "/system/bin/", "/system/xbin/", "/data/local/xbin/",
"/data/local/bin/", "/system/sd/xbin/", "/system/bin/failsafe/", "/data/local/"
)
for (where in places) {
if (File(where + binaryName).exists()) {
found = true
break
}
}
}
return found
}
}
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (RootChecker().isRooted()) {
AlertDialog.Builder(this)
.setTitle("Found rooted system")
.setMessage("Please install on an android which isn't rooted")
.setPositiveButton("Okay.") { _, _ ->
finishAffinity()
}
.setOnDismissListener {
finishAffinity()
}
.setIcon(android.R.drawable.ic_dialog_alert)
.show()
}
}
}