Je tente de mettre à jour la colonne 'name' de la table de base de données APN préférée à l'emplacement: content: // telephony/carriers/preferapn. Toutefois, ContentResolver.update() de mon application renvoie toujours 0, ce qui signifie qu'aucune ligne n'a été mise à jour. J'ai déjà un accès root pour l'application et je l'ai confirmé par programme avant d'exécuter update().Android 4.2.1 - Mise à jour par programmation d'une colonne dans la base de données des paramètres APN
Vous trouverez des détails sur les colonnes de table here et here. J'ai également veillé à référencer le documentation sur la façon dont la fonction de mise à jour est appelée.
La méthode de mise à jour:
public boolean setAPN(String newAPN, TextView t){
//get URI objects for the tables
final Uri APN_TABLE_URI = Uri.parse("content://telephony/carriers");
final Uri PREFERRED_APN_URI = Uri.parse("content://telephony/carriers/preferapn");
//Confirm permissions
PackageManager pm = getPackageManager();
if (pm.checkPermission(permission.WRITE_APN_SETTINGS, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
//Update name field
ContentResolver resolver = this.getContentResolver();
ContentValues values = new ContentValues();
values.put("name", newAPN);
long rc = resolver.update(PREFERRED_APN_URI, values, null, null);
//Display the row contents (always has the original fields, doesn't update)
Cursor c = getContentResolver().query(PREFERRED_APN_URI, null, null, null, null);
c.moveToFirst();
int index = c.getColumnIndex("_id"); //getting index of required column
Short id = c.getShort(index); //getting APN's id from
index = c.getColumnIndex("name");
String name = c.getString(index);
index = c.getColumnIndex("mcc");
String mcc = c.getString(index);
index = c.getColumnIndex("mnc");
String mnc = c.getString(index);
index = c.getColumnIndex("numeric");
String numeric = c.getString(index);
t.setText(" ID:" + id + "\n" +
" APN Name: " + name + "\n" +
" MCC: " + mcc + "\n" +
" MNC: " + mnc + "\n" +
" Numeric: " + numeric + "\n"
);
} else {
t.setText(" You don't have permission to do this. ");
}
return true;
}
Comme mentionné précédemment, j'ai aussi la permission: « android.permission.WRITE_APN_SETTINGS » dans le fichier manifeste:
J'ai appelé la fonction de mise à jour de façon incorrecte pour mon raison particulière? Ou utilise update() dans le mauvais sens?
C'est fou. Merci d'avoir partagé. –