4.在地圖上添加一個(gè)標(biāo)記:這種寫法會導(dǎo)致addoverlay是紅色的
改法:
把mbaidumap要改為自己地圖資源的名字:mMapview.
特別需要注意的是系吩,這段代碼應(yīng)該添加到oncreat函數(shù)中,不然也會導(dǎo)致addoverlay為紅色的,addoverlay是創(chuàng)建覆蓋物的一個(gè)方法
在構(gòu)建maker圖標(biāo)前添加一句話:
在地圖上創(chuàng)建可以移動(dòng)的覆蓋物:
改法:
5.如何實(shí)現(xiàn)地圖的定位:
(1)參考慕課網(wǎng)的方法
①調(diào)用百度地圖的定位梯码,實(shí)現(xiàn)出來和安卓的系統(tǒng)定位不一樣的地方就是使用百度地圖進(jìn)行定位能夠在屏幕的中央顯示一個(gè)小藍(lán)點(diǎn)。
在mainactivity中使用initLocation方法颠黎,然后創(chuàng)建這個(gè)方法赵哲。
然后再書寫onstart和onstop方法的代碼,在進(jìn)入程序的時(shí)候開始進(jìn)行定位俊柔,離開的時(shí)候銷毀定位筹麸。這樣可以每次打開應(yīng)用的時(shí)候都是更新了的位置。
還需要寫一個(gè)位置監(jiān)聽器雏婶。用位置監(jiān)聽器獲得當(dāng)前經(jīng)緯度
效果:
(2)用安卓自帶的系統(tǒng)定位
安卓系統(tǒng)可以調(diào)用自己的定位物赶,可以通過文本形式在界面中進(jìn)行顯示。
通過addtext方法添加到界面中進(jìn)行經(jīng)緯度的顯示留晚。顯示為location=參數(shù)值酵紫。調(diào)用廣播接收,查找經(jīng)緯度值错维。
①添加一個(gè)textview控件
②需要聲明的變量
③需要添加在mainactivity的oncreate函數(shù)中的
④需要添加到mainactivity中其他位置的代碼
位置監(jiān)聽器:
列表函數(shù)方法:
Onresume
Onpause
⑤效果圖
6.出現(xiàn)的問題
定位到其他位置:①可能是手機(jī)GPS沒有處于打開狀態(tài)
②源代碼中權(quán)限沒添加
③手機(jī)不信任此應(yīng)用奖地,需要手動(dòng)打開權(quán)限,權(quán)限沒有打開很有可能導(dǎo)致程序崩潰赋焕。
7.發(fā)短信:
1.第一種方法
在界面上添加to参歹,what,getfrom隆判,getcontent犬庇,send五個(gè)關(guān)于發(fā)短信的控件。
實(shí)現(xiàn)的功能是蜜氨,在to的編輯框內(nèi)輸入一個(gè)電話號碼械筛,在what里編輯短信,點(diǎn)擊send實(shí)現(xiàn)發(fā)送飒炎。
當(dāng)好友收到短信時(shí)埋哟,在getfrom的文本框內(nèi)會顯示他的電話號碼;app自動(dòng)讀取短信郎汪,獲取經(jīng)緯度赤赊。在getcontent的文本框內(nèi)顯示短信內(nèi)容。
①在界面上添加to煞赢,what抛计,getfrom,getcontent照筑,send五個(gè)關(guān)于發(fā)短信的控件吹截。
②mainactivity中
Onresume中
短信發(fā)送后的發(fā)送狀態(tài)廣播接收器:
//短信發(fā)送到對方后瘦陈,對對方返回的接受狀態(tài)的處理邏輯public classSmsDeliveryStatusReceiverextendsBroadcastReceiver {
private static finalStringTAG="SmsDeliveryStatusReceiver";
@Override
public voidonReceive(Context context, Intent intent) {// Log.d(TAG,"SmsDeliveryStatusReceiver onReceive.");switch(getResultCode()) {
caseActivity.RESULT_OK:
Toast.makeText(context,"Send Succeeded",Toast.LENGTH_SHORT).show();// Log.i(TAG, "RESULT_OK");break;
caseActivity.RESULT_CANCELED:
Toast.makeText(context,"Send Failed",Toast.LENGTH_SHORT).show();// Log.i(TAG, "RESULT_CANCELED");break;
}
Bundle bundle = intent.getExtras();
Object[] pdus = (Object[])bundle.get("pdus");
SmsMessage[] messages =newSmsMessage[pdus.length];
for(inti =0; ilength; i++)
{
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
}
String address = messages[0].getOriginatingAddress();
String fullMessage =" ";
for(SmsMessage message : messages)
{
fullMessage += message.getMessageBody();
}//收取處理短信字符串 ? -> ?address ?fullmessageif(fullMessage.trim().equals("where are you?"))
{
//Toast.makeText(getApplicationContext(),address.substring(3, address.length()), Toast.LENGTH_SHORT).show();SmsManager smsManager = SmsManager.getDefault();//address.substring(3)smsManager.sendTextMessage(address.substring(3, address.length()),null,//String.valueOf(mLatitude)+"/"+String.valueOf(mLongtitude),null,null);
}
}
}
MessageReceivermessageReceiver=newMessageReceiver();
//registerReceiver(messageReceiver, receiveFilter);classMessageReceiverextendsBroadcastReceiver{
@Override
public voidonReceive(Context context, Intent intent) {
String sms ="";
Bundle bundle = intent.getExtras();
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
for(Object pdu : pdus) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
String address = smsMessage.getDisplayOriginatingAddress();
String fullMessage = smsMessage.getMessageBody();
sender.setText(address);
//content.setText(fullMessage);sms += fullMessage;
/* if ("10086".equals(address)) {//測試截?cái)喽绦?/i>abortBroadcast();}*/}
content.setText(sms);
}
}
2.第二種方法
①首先在main樣式表中添加“特別關(guān)心”Button控件,ID:button1波俄;
②聲明button
在mainactivity的oncreat函數(shù)中添加
點(diǎn)擊按鈕后執(zhí)行的方法:
這樣短信就可以通過點(diǎn)擊“特別關(guān)心”按鈕進(jìn)行發(fā)送啦
8.如何自動(dòng)回復(fù)好友的短信為經(jīng)緯度晨逝,如何自動(dòng)讀取短信并且顯示point坐標(biāo)在地圖資源控件上:
①在mainactivity最后一個(gè)大括號之前添加:
這個(gè)方法介紹的內(nèi)容是:在收到了一個(gè)短信之后,把短信的內(nèi)容轉(zhuǎn)化為massage懦铺,把發(fā)送短信的號碼傳值給sender變量捉貌;用if語句判斷短信的內(nèi)容是否為“where are you?”,如果是where are you?的話就把獲取的短信號碼變?yōu)閷⒁貜?fù)的短信號碼冬念〕们裕回復(fù)的內(nèi)容為:經(jīng)度+緯度。然后進(jìn)行發(fā)送
如果收到短信的內(nèi)容中包含內(nèi)容“/”(包含經(jīng)緯度坐標(biāo)的回復(fù)短信)的話急前,則開始執(zhí)行短信內(nèi)容轉(zhuǎn)化為經(jīng)緯度坐標(biāo)并顯示在地圖上的代碼醒陆。
先把短信進(jìn)行了拆分,傳值進(jìn)字符串mLatitude和mlongtitude叔汁,再進(jìn)行數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)化(因?yàn)樽鴺?biāo)點(diǎn)必須是double類型的數(shù)據(jù))统求,最后創(chuàng)建坐標(biāo)點(diǎn)检碗。
②在onstart方法中添加在程序一開始就運(yùn)行監(jiān)測收到短信的代碼:如下圖所示
③需要聲明的變量名:
達(dá)到的效果: