当靠近预定义位置时,如何从Android发送文本消息(SMS)

当靠近预定义位置时,如何从Android发送文本消息(SMS),android,android-location,Android,Android Location,在预定义位置附近时从Android发送短信 例如,我进入学院或离开学院时,我的Android设备会检查我的当前位置是否与预定义的位置匹配,然后我的设备会自动向其他号码发送短信 任何朋友都有与此相关的想法或代码 谢谢你。我把短信中的全部代码都放进去了。你应该看看sendSms的功能。util允许您监视传入的sms并跟踪您发送的sms(如果您想这样做) 下一部分是处理位置更新。最好的方法取决于很多事情。您可以通过定位提供商(GPS、无线或无源)获取位置,或从TelephonyManager读取手机信

在预定义位置附近时从Android发送短信

例如,我进入学院或离开学院时,我的Android设备会检查我的当前位置是否与预定义的位置匹配,然后我的设备会自动向其他号码发送短信

任何朋友都有与此相关的想法或代码


谢谢你。

我把短信中的全部代码都放进去了。你应该看看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