我試圖構建一個使用SmsMessage類應用程序,但也有因設備的API級兩個版本:Android - 支持1.6+,並支持1.5版本的棄用代碼?
android.telephony.gsm.SmsMessage(不建議使用1.6及以上)
android.telephony.SmsMessage(1.6及更高版本的新類)
我想要定位1.5,但在1.6或更高版本的設備上運行較新的類(android.telephony.SmsMessage)。我該怎麼做呢?
我已經厭倦了這一點: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 2010-07-03 22:43:47
你的例子完美地工作。爲了確保,因爲我將min SDK設置爲3(目標爲4),應用程序應該在市場上出現運行1.5+以上的設備?再次感謝。 – RyanM 2010-07-04 01:24:44
@ borg17of20:無論您是否出現在Market中,都將由您的清單中的android:minSdkVersion設置確定(請參閱usessdk元素),而不是運行構建工具時的構建目標。 – CommonsWare 2010-07-04 08:32:36