Je suis en train de construire une application qui utilise la classe SmsMessage mais il y a deux versions en fonction du niveau de l'API de l'appareil:Android - Support 1.6+, et le soutien pour le code obsolète en 1.5?
android.telephony.gsm.SmsMessage (dépréciée pour 1,6 et plus)
android.telephony.SmsMessage (la nouvelle classe pour 1.6 et plus)
Je veux cibler 1.5 et avoir la nouvelle classe (android.telephony.SmsMessage) sur les appareils avec 1.6 ou plus. Comment puis-je faire cela?
J'ai déjà fatigué ceci: http://devtcg.blogspot.com/2009/12/gracefully-supporting-multiple-android.html mais je ne pouvais pas le faire fonctionner (l'auteur ne mentionne pas comment il/elle gère les différentes importations, les paramètres exacts de niveau api etc.)
Merci.
import java.util.Date;
import com.apps.myapp.Utilities;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.gsm.SmsMessage;//*NOTE* depreciated in v1.6+
public class OfflineSMSReceiver extends SMSReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
System.out.println("SMS_RECEIVED");
System.out.println(Utilities.getNow());
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
Date date;
long timeStamp;
String time;
String str = "";
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
timeStamp = msgs[i].getTimestampMillis();
date = new Date(timeStamp);
time = this.getTime(date.getHours(),date.getMinutes(),date.getSeconds());
str += "SMS from " + msgs[i].getOriginatingAddress();
str += " :";
str += msgs[i].getMessageBody().toString();
str += "\n";
str += "TIME: "+time+"\t"+this.getNowDate();
}
System.out.println(str);
}
}
}
Merci de votre réponse. Votre premier lien a été très utile. Après avoir regardé ce code, je pense que je comprends ce que je dois faire. La clé configure correctement la classe abstraite. Je rapporterai après avoir essayé ceci par moi-même. Merci encore. – RyanM
Votre exemple a parfaitement fonctionné. Juste pour s'assurer, parce que je mets le min SDK à 3 (cible à 4), l'application devrait apparaître sur le marché pour les appareils qui fonctionnent 1.5+? Merci encore. – RyanM
@ borg17of20: Que vous apparaissiez ou non sur le Marché sera déterminé par votre paramètre 'android: minSdkVersion' dans votre manifeste (voir l'élément' uses-sdk'), et non par votre cible de construction lors de l'exécution des outils de construction. – CommonsWare