当靠近预定义位置时,如何从Android发送文本消息(SMS)
在预定义位置附近时从Android发送短信 例如,我进入学院或离开学院时,我的Android设备会检查我的当前位置是否与预定义的位置匹配,然后我的设备会自动向其他号码发送短信 任何朋友都有与此相关的想法或代码当靠近预定义位置时,如何从Android发送文本消息(SMS),android,android-location,Android,Android Location,在预定义位置附近时从Android发送短信 例如,我进入学院或离开学院时,我的Android设备会检查我的当前位置是否与预定义的位置匹配,然后我的设备会自动向其他号码发送短信 任何朋友都有与此相关的想法或代码 谢谢你。我把短信中的全部代码都放进去了。你应该看看sendSms的功能。util允许您监视传入的sms并跟踪您发送的sms(如果您想这样做) 下一部分是处理位置更新。最好的方法取决于很多事情。您可以通过定位提供商(GPS、无线或无源)获取位置,或从TelephonyManager读取手机信
谢谢你。我把短信中的全部代码都放进去了。你应该看看sendSms的功能。util允许您监视传入的sms并跟踪您发送的sms(如果您想这样做) 下一部分是处理位置更新。最好的方法取决于很多事情。您可以通过定位提供商(GPS、无线或无源)获取位置,或从TelephonyManager读取手机信息。下面是关于它们的一些详细信息:
- 返回地理纬度/经度数据
- 如果用户禁用“使用GPS卫星”和“用户无线网络”,则无法读取数据
- 如果你在一幢大楼里(那里没有GPS信号),你宁愿不获取数据
- 你得等很长时间才能找到位置
- 准确度很好
- 电池电量会消耗很多
- “”提供商可能是您的好选择
- 返回设备的相邻小区信息
- 如果您的设备未连接到gsm/cdma网络(无sim卡),则位置不可用
- 不是很好的准确性,但对你的目的将是好的
- 电池不会消耗太多
package android.commons;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.telephony.gsm.SmsMessage;
import android.util.Log;
public final class SmsModem extends BroadcastReceiver {
private static final String SMS_DELIVER_REPORT_ACTION = "android.commons.SMS_DELIVER_REPORT";
private static final String SMS_DELIVER_REPORT_TOKEN_EXTRA = "token";
private static final String TAG = SmsModem.class.getSimpleName();
private final Context context;
private final SmsManager smsManager;
private final SmsModemListener listener;
private final Map<String, Integer> pendingSMS = new HashMap<String, Integer>();
public interface SmsModemListener {
public void onSMSSent(String token);
public void onSMSSendError(String token, String errorDetails);
public void onNewSMS(String address, String message);
}
public SmsModem(Context c, SmsModemListener l) {
context = c;
listener = l;
smsManager = SmsManager.getDefault();
final IntentFilter filter = new IntentFilter();
filter.addAction(SMS_DELIVER_REPORT_ACTION);
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
context.registerReceiver(this, filter);
}
public void sendSms(String address, String message, String token) {
if ( message != null && address != null && token != null) {
final ArrayList<String> parts = smsManager.divideMessage(message);
final Intent intent = new Intent(SMS_DELIVER_REPORT_ACTION);
intent.putExtra(SMS_DELIVER_REPORT_TOKEN_EXTRA, token);
final PendingIntent sentIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
final ArrayList<PendingIntent> intents = new ArrayList<PendingIntent>();
for ( int i = 0 ; i < parts.size() ; i++ ) {
intents.add(sentIntent);
}
pendingSMS.put(token, parts.size());
smsManager.sendMultipartTextMessage(address, null, parts, intents, null);
}
}
public void clear() {
context.unregisterReceiver(this);
}
@Override
public void onReceive(Context c, Intent intent) {
final String action = intent.getAction();
if ( action.equalsIgnoreCase("android.provider.Telephony.SMS_RECEIVED")) {
final Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdusObj.length];
for (int i = 0; i<pdusObj.length; i++) {
messages[i] = SmsMessage.createFromPdu ((byte[]) pdusObj[i]);
final String address = messages[i].getDisplayOriginatingAddress();
final String message = messages[i].getDisplayMessageBody();
listener.onNewSMS(address, message);
}
}
} else if ( action.equalsIgnoreCase(SMS_DELIVER_REPORT_ACTION)) {
final int resultCode = getResultCode();
final String token = intent.getStringExtra(SMS_DELIVER_REPORT_TOKEN_EXTRA);
Log.d(TAG, "Deliver report, result code '" + resultCode + "', token '" + token + "'");
if ( resultCode == Activity.RESULT_OK ) {
if ( pendingSMS.containsKey(token) ) {
pendingSMS.put(token, pendingSMS.get(token).intValue() - 1);
if ( pendingSMS.get(token).intValue() == 0 ) {
pendingSMS.remove(token);
listener.onSMSSent(token);
}
}
} else {
if ( pendingSMS.containsKey(token) ) {
pendingSMS.remove(token);
listener.onSMSSendError(token, extractError(resultCode, intent));
}
}
}
}
private String extractError(int resultCode, Intent i) {
switch ( resultCode ) {
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
if ( i.hasExtra("errorCode") ) {
return i.getStringExtra("errorCode");
} else {
return "Unknown error. No 'errorCode' field.";
}
case SmsManager.RESULT_ERROR_NO_SERVICE:
return "No service";
case SmsManager.RESULT_ERROR_RADIO_OFF:
return "Radio off";
case SmsManager.RESULT_ERROR_NULL_PDU:
return "PDU null";
default:
return "really unknown error";
}
}
}
包android.commons;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Map;
导入android.app.Activity;
导入android.app.pendingent;
导入android.content.BroadcastReceiver;
导入android.content.ContentValues;
导入android.content.Context;
导入android.content.Intent;
导入android.content.IntentFilter;
导入android.net.Uri;
导入android.os.Bundle;
导入android.telephony.gsm.smsmsmanager;
导入android.telephony.gsm.sms消息;
导入android.util.Log;
公共最终类SmsModem扩展广播接收器{
私有静态最终字符串SMS_DELIVER_REPORT_ACTION=“android.commons.SMS_DELIVER_REPORT”;
私有静态最终字符串SMS\u DELIVER\u REPORT\u TOKEN\u EXTRA=“TOKEN”;
私有静态最终字符串标记=SmsModem.class.getSimpleName();
私人最终语境;
私人最终SmsManager SmsManager;
私有最终SmsModemListener侦听器;
private final Map pendingSMS=new HashMap();
公共接口SmsModemListener{
公共void onmssent(字符串令牌);
MSSENDERROR上的公共无效(字符串标记、字符串错误详细信息);
WSMS(字符串地址、字符串消息)的公共无效信息;
}
公共SMODEM(上下文c,SmsModemListener l){
上下文=c;
监听器=l;
smsManager=smsmsmanager.getDefault();
最终IntentFilter筛选器=新IntentFilter();
filter.addAction(SMS\u DELIVER\u REPORT\u ACTION);
filter.addAction(“android.provider.Telephony.SMS_RECEIVED”);
registerReceiver(这个,过滤器);
}
公共无效发送SMS(字符串地址、字符串消息、字符串令牌){
if(message!=null&&address!=null&&token!=null){
最终ArrayList部件=smsManager.divideMessage(消息);
最终意图=新意图(SMS、交付、报告、行动);
意向。额外支付(短信、发送、报告、代币、代币);
final pendingent sentinent=pendingent.getBroadcast(上下文,0,意图,pendingent.FLAG_UPDATE_CURRENT);
最终ArrayList意图=新建ArrayList();
对于(int i=0;i 对于(int i=0;ii如果任何好友有与此相关的代码,请在我的id prashant上发送给我。kadam4995@gmail.com