Я пытаюсь создать приложение, которое использует класс SMSMessage, но есть две версии в зависимости от уровня API устройства:Android - Поддержка 1.6+ и поддержка устаревшего кода в 1,5?
android.telephony.gsm.SmsMessage (устаревшее для 1.6 и выше)
android.telephony.SmsMessage (новый класс для 1.6 и выше)
Я хочу настроить таргетинг на 1.5, но при этом новый класс (android.telephony.SmsMessage) работает на устройствах с 1.6 или выше. Как мне это сделать?
Я уже устал это: http://devtcg.blogspot.com/2009/12/gracefully-supporting-multiple-android.html, но я не мог заставить его работать (автор не упоминает о том, как он/она обрабатывает различный импорт, точные настройки уровня API и т.д.)
Благодарности.
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);
}
}
}
Спасибо, что ответили. Ваша первая ссылка была очень полезной. Посмотрев на этот код, я думаю, что понимаю, что мне нужно делать. Ключ правильно настраивает абстрактный класс. Я отчитаюсь после того, как попытаюсь это сделать самостоятельно. Еще раз спасибо. – RyanM
Ваш пример отлично работал. Просто чтобы убедиться, потому что я установил минимальный SDK в 3 (цель до 4), приложение должно появиться на рынке для устройств с 1.5+? Еще раз спасибо. – RyanM
@ borg17of20: независимо от того, обнаруживаетесь ли вы на рынке, ваш параметр 'android: minSdkVersion' будет указан в вашем манифесте (см. Элемент' uses-sdk'), а не вашей целью сборки при запуске инструментов сборки. – CommonsWare