Jetzt hat mir der User erst mitgeteilt, daß er dem Advanced Protection programm beigetreten war. Da hat man dann mit APKs keine Chance.
Es ist wohl auch im Rahmen der Zwei-Faktor-Authentifizierung.
Jetzt hat mir der User erst mitgeteilt, daß er dem Advanced Protection programm beigetreten war. Da hat man dann mit APKs keine Chance.
Es ist wohl auch im Rahmen der Zwei-Faktor-Authentifizierung.
wieso gibst du das an?
Sorry, weiss nicht mehr wie das in die Build rein gekommen ist ? Kann das ja mal entfernen.
werde ich auch mal testen.
Habe u.a. jetzt festgestellt, daß man im Google-Konto wohl festlegen kann, ob Installationen von fremde Quellen zulässig sind.
Erst mal vielen Dank, habe gerade keinen Zugriff auf ein ANDROID 14 Handy. Auf Android 13 Handys funktioniert die APK-Installation !!
Bist Du absolut sicher, hast Du das selbst mit einem ANDROID 14 Handy und einer APK gestestet ?
Ich hätte nicht gepostet, wenn wir nicht bereits die genannten Möglichkeiten geprüft hätten.
Unten stehen die Build Parameter.
Die Systemeinstellungen habe ich natürlich getätigt.
In anderen Foren wird auch teilweise auf die ADB Variante hingewiesen, welche ich natürlich bei mir aber nicht bei eventuellen Kunden nutzen kann.
Habe mit mehreren APPs , wie "Dateimanager" getestet, d.h. Doppelklick auf die APK startet die Installation und bricht dann ab.
Der "FileManager" bietet garnicht erst die Installationsmöglichkeit.
plugins {
id 'com.android.application'
}
android {
namespace 'com.fk.CheckTasks'
compileSdk 34
defaultConfig {
applicationId "com.fk.CheckTasks"
minSdk 29
targetSdk 34
versionCode 1
versionName "2.00"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
sourceSets {
main {
java {
srcDirs 'src\\main\\java', 'src\\main\\Dialoge', 'src\\main\\java\\Dialoge'
}
}
}
buildFeatures {
viewBinding true
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation files('recyclerview')
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
implementation "androidx.recyclerview:recyclerview:1.3.0"
implementation "androidx.datastore:datastore-preferences:1.0.0"
implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
}
Alles anzeigen
Noch etwas näher erklärt.
Mit PIN-System meine ich unser Zugriffsystem mit einem entsprechenden Schlüssel, den wir auf der Basis der Telefonnummer gebildet haben. Was besseres ist uns nicht eingefallen, da wir nicht über offizielle weitere Kundendaten verfügen. Bei einem Kauf bei Google wäre das anders.
Es funktioniert ja alles bestens bis ich auf das Handy meines Sohnes gestoßen bin. Er hat zwie SIM-Karten. Die aktive Karte liefert keine Nummer an die ich mit den normalen Befehlen heran komme ("unknown"), die andere Karte liefert aber. Die Telefoninfo liefert auch "unbekannt".
Dazu gibt es in vielen Foren die unterschiedlichsten Antworten.
ja, sind wir, da wir noch nie eine APP bei Google anmelden wollten !!
Es sei doch die Frage gestattet, wieso Google das Recht hat APKs zu blocken.
Ist das so in Ordnung ? Totale Beschneidung eines Monopolisten. Ich sollte doch selbst entscheiden können.
Es liegt u.a. auch an den Bedingungen der Anmeldung. Z.B. , wieso benötige ich unbedingt eine WEB-Seite , Google hat alle meine persönlichen Daten.
Wenn ich keine WEB-Seite vorweisen kann beeinträchtigt das höchstens meine Kompetenz bzw. Vertrauenswürdigkeit. Aber auch das ist meine Sache.
Wir wollen ja erst mal nicht verkaufen. Unsere User wollen halt eine Installationsmöglichkeit, da APK nicht geht.
Ich schaue mir gerade AMAZON Developer und SAMSUNG Developer an !!
Guten Rutsch und eine gesundes 2024 für alle !
Hallo,
gibt es wirklich keine Möglichkeit eine eigene APK ohne Android Debug Bridge unter Android 14 zu installieren ?
Kann Google so einfach eigene Restriktionen einführen ? Wir haben einen eingeschränkten Nutzerkreis und wollen einfach nicht das Verfahren über Google durchlaufen .
Dem User sollte doch erlaubt sein, zu installieren was er will, selbst wenn er ein Risiko eingeht, eine Warnung wie bisher reicht doch.
Gibt es eventuell Tools, die helfen diese Einschränkung zu umgehen ?
Hallo,
ab Android11 gibt es immer mehr Probleme, um an die Telefondaten heranzukommen.
Bis jetzt hat mein PIN-System wunderbar mit der Telefonnummer funktioniert. Nun bin ich auf ein Handy gestoßen welches mir "unbekannt" zurück gibt.
Habe in den Foren schon gelesen, wie man dies eventuell ausschließen kann, aber dem Kunden möchte ich das nicht zumuten (z.B. neue SIM-Karte).
IMEI und Seriennummer bringen immer Permission-Fehler. Vielleicht mache ich auch etwas falsch.
Gibt es noch andere Systemdaten die man auslesen könnte und die natürlich am Phone anzeigbar sind ?
Danke Wolfgang
Hallo,
daß die APP abbricht, wenn der User die Permissions (bei mir Telefonzugriff, Nummer) nicht erlaubt hat kann ich mit finish() regeln.
Beim nächsten Start möchte ich aber wieder nach der Erlaubnis für den Zugriff fragen. Ich möchte aber nicht immer abbrechen, sondern wiederholt fragen.
Bis jetzt scheint er sich zu merken, daß der User den Zugriff nicht will und übergeht weitere nachfragen.
Kann man das überhaupt regeln , wenn ja wie ?
if (ActivityCompat.checkSelfPermission(this, READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{READ_PHONE_NUMBERS}, PERMISSION_REQUEST_CODE);
} else {
telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
.......
}
}
@RequiresApi(api = Build.VERSION_CODES.P)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
if ( ActivityCompat.checkSelfPermission(this, READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// ..... hier könnte man eventuell die Wiederholung vorbereiten nicht nur finish()//
} else {
telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
phoneNumber = telephonyManager.getLine1Number();
......
}
}
}
Alles anzeigen
danke, eigentlich klar, daß sich das mit einem launcher (requestPermissionLauncher) regeln läßt. Beim take picture macht man es ja auch !!
Folgendes problem:
Ich hole Fotos aus der Gallerie und die werden auch sofort angezeigt.
Beim zweiten Versuch werden die Fotos nicht mehr angezeigt. Erst wenn ich über Einstellungen die Dateifreigabe für die APP einschalte.
Ich würde es besser finden, wenn ich bei dem Versuch der Anzeige wenigstens nach der Berechtigung gefragt werde !
Was muss ich dazu noch wo eintragen ? Muss ich eventuell beim rotatebitmap die permissions noch mal abfragen ?
Manifest
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
Alles anzeigen
Anzeige:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
name1 = c1.getString(0); // Foto Dateiverzeichnis
bitmap = BitmapFactory.decodeFile(name1);
bitmap = rotateBitmap(bitmap, name1);
bitmapGallery = bitmap;
foto_image1.setImageBitmap(bitmap); // im Layout anzeigen
} else {
ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, 100);
name1 = c1.getString(0);
try {
bitmap = BitmapFactory.decodeFile(name1);
bitmapGallery = bitmap;
bitmap = rotateBitmap(bitmap, name1);
foto_image1.setImageBitmap(bitmap);
} catch (Exception e) {
e.printStackTrace();
}
}
public Bitmap rotateBitmap(Bitmap input, String path) {
Bitmap returnBitmap = input;
int orientation = 0;
try {
ExifInterface exif = new ExifInterface(path);
int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int rotationInDegrees = exifToDegrees(rotation);
Matrix matrix = new Matrix();
if (rotation != 0f) {
matrix.preRotate(rotationInDegrees);
}
rotatedBitmap = Bitmap.createBitmap(input, 0, 0,
input.getWidth(), input.getHeight(), matrix, true);
returnBitmap = rotatedBitmap;
} catch (IOException e) {
e.printStackTrace();
}
return returnBitmap;
}
Alles anzeigen
noch ein Nachtrag. Um ständiges hin und her kippen abzufangen musste ich onRestoreInstanceState noch erweitern, betrifft die Ablage des Fotos in der ImageView.
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
String fototUri=savedInstanceState.getString("foto");
if (fototUri!=null) {
image_uri=Uri.parse(fototUri);
Bitmap inputImage = uriToBitmap(image_uri);
Bitmap rotated = rotateBitmap(inputImage);
taskPicture.setImageBitmap(rotated);
fname = getRealPathFromURI(Bild_Activity.this, image_uri);
}
super.onRestoreInstanceState(savedInstanceState);
}
Alles anzeigen
Das ging schneller als ich gedacht habe. Das bereits getätigte Foto wird mit onSaveInstanceState abgelegt und mit onRestoreInstanceState wieder geholt.
Folgende voids eingefügt und alles läuft !! Man sollte sich mal gründlich mit dem life cycle beschäftigen.
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
if (image_uri!= null)
outState.putString("foto", image_uri.toString());
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
String fototUri=savedInstanceState.getString("foto");
if (fototUri!=null) {
image_uri=Uri.parse(fototUri);
}
super.onRestoreInstanceState(savedInstanceState);
}
Alles anzeigen
Okay, schau ich mir an, danke !!
Mir war absolut nicht klar, daß beim Kippen die Activity neu gestartet wird.
und hier noch die Layouts:
portrait:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:background="@color/weiss"
tools:context=".Bild_Activity"
tools:ignore="HardcodedText,MissingDefaultResource">
<ImageView
android:id="@+id/image_task"
android:layout_width="match_parent"
android:layout_height="293dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="50dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="30dp"
tools:srcCompat="@tools:sample/avatars" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="2dp"
android:layout_weight="2"
android:background="@color/weiss">
<LinearLayout
android:id="@+id/Layout_Button_Take_Picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/Button_Take_Picture"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginRight="5dp"
android:onClick="onClickTakePicture"
android:padding="2dp"
android:text="Take picture"
android:textColor="@color/weiss" />
</LinearLayout>
<LinearLayout
android:id="@+id/Layout_Button_Save_Picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/Button_Save_Picture"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:onClick="onClickSavePicture"
android:padding="2dp"
android:text="Save picture"
android:textColor="@color/weiss" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
Alles anzeigen
landscape:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:background="@color/weiss"
tools:context=".Bild_Activity"
tools:ignore="HardcodedText,MissingDefaultResource">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="328dp"
android:orientation="vertical">
<ImageView
android:id="@+id/image_task"
android:layout_width="match_parent"
android:layout_height="210dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="10dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="10dp"
tools:srcCompat="@tools:sample/avatars" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="2dp"
android:layout_weight="2"
android:background="@color/weiss">
<LinearLayout
android:id="@+id/Layout_Button_Take_Picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/Button_Take_Picture"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_marginRight="5dp"
android:onClick="onClickTakePicture"
android:padding="2dp"
android:text="Take picture"
android:textColor="@color/weiss" />
</LinearLayout>
<LinearLayout
android:id="@+id/Layout_Button_Save_Picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/Button_Save_Picture"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:onClick="onClickSavePicture"
android:padding="2dp"
android:text="Save picture"
android:textColor="@color/weiss" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
Alles anzeigen
Hallo,
um Fotos zu machen habe ich 2 Layouts (portrait und landscape, siehe Dateien). Bei Take picture wird die Camera geöffnet und das Foto wird dann in dem Layout angezeigt (siehe Datei), mit save picture dann abgelegt.
Problem:
Wenn ich nach dem Öffnen der Kamera von vertikal zu horizontal wechsle und fotografiere öffnet sich danach richtig das landscape-Layout, aber das Foto wird nicht angezeigt sondern die APP stürzt ab, leider ohne jede Fehlerkennung, außer image_uri istr nach dem Umkippen null ?
private void openCamera() {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "New Picture");
values.put(MediaStore.Images.Media.DESCRIPTION, "From the Camera");
image_uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri);
cameraActivityResultLauncher.launch(cameraIntent);
}
//TODO capture the image using camera and display it
ActivityResultLauncher<Intent> cameraActivityResultLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK) {
Bitmap inputImage = uriToBitmap(image_uri);
Bitmap rotated = rotateBitmap(inputImage);
taskPicture.setImageBitmap(rotated);
fname = getRealPathFromURI(Bild_Activity.this, image_uri);
}
}
});
//TODO takes URI of the image and returns bitmap
private Bitmap uriToBitmap(Uri selectedFileUri) {
try {
ParcelFileDescriptor parcelFileDescriptor =
getContentResolver().openFileDescriptor(selectedFileUri, "r");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
// Bitmap rotated = rotateBitmap(image);
parcelFileDescriptor.close();
return image;
// return rotated;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Alles anzeigen
Habe eine Lösung gefunden:
Mit Abfrage der Orientierung drehe ich das Bild danach. Die Anweisungen für die PDF-Ablage habe ich teilweise weggelassen.
orientation = getCameraPhotoOrientation(getContext(), fname);
try {
switch (i) {
case 1:
//todo --- die Bilder kleiner machen ----------------
if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
bitmap = BitmapFactory.decodeFile(fname);
if (fname_low.equals("")) {
fname = saveBitmap(bitmap, fotoID); //Verzeichnis in Tabelle ablegen
} else {
fname = fname_low;
}
} else {
// Request the permission
ActivityCompat.requestPermissions(requireActivity(), REQUIRED_PERMISSIONS, 100);
bitmap = BitmapFactory.decodeFile(fname);
if (fname_low.equals("")) {
fname = saveBitmap(bitmap, fotoID);
} else {
fname = fname_low;
}
}
if (orientation == 0) { // quer
bitmap = Bitmap.createScaledBitmap(bitmap, 345, 200, true);
} else {
bitmap = rotateBitmap(bitmap, orientation);
bitmap = Bitmap.createScaledBitmap(bitmap, 200, 350, true);
}
canvas.drawBitmap(bitmap, 50, (k - 3) * a - 20 + 380, imagePaint);
break;
case 2: ..........
public Bitmap rotateBitmap(Bitmap input, Integer orientation) {
Matrix rotationMatrix = new Matrix();
rotationMatrix.setRotate(orientation);
Bitmap cropped = Bitmap.createBitmap(input, 0, 0, input.getWidth(), input.getHeight(), rotationMatrix, true);
return cropped;
}
public static int getCameraPhotoOrientation(Context context, String imagePath) {
int rotate = 0;
try {
File imageFile = new File(imagePath);
ExifInterface exif = new ExifInterface(
imageFile.getAbsolutePath());
int orientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return rotate;
}
Alles anzeigen
Folgende Situation:
In meiner APP werden Aufgaben erfasst. Zu diesen Aufgaben kann man je 3 Fotos ablegen, die entweder frisch aufgenommen werden oder aus der Gallery geholt werden.
Klappt alles wunderbar, die Fotos haben die beste Qualität der Kamera des Handys, was für eine spätere Auswertung auch sinnvoll ist.
Allerdings werden auch PDF-Protokolle der Aufgaben erstellt. Es kommt jetzt aber zu Situationen, daß z.B. eine 15 seitige PDF-Datei sehr lange Übertragungszeiten hat.
Da die Fotos im Druck sowieso kleiner sind will ich auch die Qualiät verringern.
Problem: Vertikale Fotos werden als Low-Variante leider quer abgelegt, ich kann diese zwar drehen, aber ich drehe nur das Querfoto. Siehe dazu die Anhänge.
Ich möchte das vertikale Foto in low-Qualität auch vertikal zeigen können.
private String saveBitmap(Bitmap bitmap, Integer fotoID) throws IOException {
String returnPath = "";
String fileName = "low-" + sdf.format(Calendar.getInstance().getTime());
ContentResolver resolver = getContext().getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES);
Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
try {
OutputStream outputStream = resolver.openOutputStream(imageUri);
if (outputStream != null) {
bitmap.compress(Bitmap.CompressFormat.JPEG, 30, outputStream);
outputStream.close();
}
returnPath = getRealPathFromURI(getContext(), imageUri);
} catch (IOException e) {
Toast.makeText(getContext(), "Failed to save image", Toast.LENGTH_SHORT).show();
}
return returnPath;
}
Alles anzeigen
Danke, genau das war das Problem , ich hatte den Filter zweimal im Mainfest !!
P.S. Dein neues Spiel, tolle Idee und nicht so einfach zu coden .....
habe an anderer Stelle Hinweis erhalten:
Da ich die APK von der SD-Card gestartet hatte hat er auch noch eine DB auf der SD-Card gefunden. APK vom internen Speicher gestartet und alles war OK !!
Hallo, schon die nächste Frage.
Unter der Arbeit mit Android Studio kann ich die Datenbank (SQLite) für mein Handy auch unter dem DeviceExplorer (/data/data/com..... .....Tasks/databases/checktaskdb) verwalten.
Falls die APP keine DB findet (wie z.B. nach einer Deinstallation) wird eine Basis DB aus Assets geladen.
Das habe ich auch so angenommen, wenn ich statt von Android Studio die Installation über die APK mache. Auch vorher deinstalliert, aber die APP holt nicht die Basis DB aus Assets sondern findet eine andere ältere DB, was ich nicht will. Wo könnte sich dieser Speicherorrt befinden ? Wie kann ich diese "Leiche" löschen ?
Danke Wolfgang