用自己的Android手机做迷你短信机

1、Android httpserver 和 http调试

Android http server  : httpcore

PC http client  : httpdebug

2、短信发送

Android自带的android.telephony.SmsManager包

3、源码:

package com.example.httpservertest;

import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;
import java.util.Locale;

import org.apache.http.ConnectionClosedException;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.HttpServerConnection;
import org.apache.http.HttpStatus;
import org.apache.http.MethodNotSupportedException;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.DefaultConnectionReuseStrategy;
import org.apache.http.impl.DefaultHttpResponseFactory;
import org.apache.http.impl.DefaultHttpServerConnection;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpProcessor;
import org.apache.http.protocol.HttpRequestHandler;
import org.apache.http.protocol.HttpRequestHandlerRegistry;
import org.apache.http.protocol.HttpService;
import org.apache.http.protocol.ImmutableHttpProcessor;
import org.apache.http.protocol.ResponseConnControl;
import org.apache.http.protocol.ResponseContent;
import org.apache.http.protocol.ResponseDate;
import org.apache.http.protocol.ResponseServer;

import android.telephony.SmsManager;

/**
 * Basic, yet fully functional and spec compliant, HTTP/1.1 file server.
 * <p>
 * Please note the purpose of this application is demonstrate the usage of
 * HttpCore APIs. It is NOT intended to demonstrate the most efficient way of
 * building an HTTP file server.
 *
 *
 */
public class HttpServer {

	public static void start(String[] args) throws Exception {

		Thread t = new RequestListenerThread(8080);
		t.setDaemon(false);
		t.start();		//start the webservice server
	}

	static class WebServiceHandler implements HttpRequestHandler {

		public WebServiceHandler() {
			super();
		}

		public void handle(final HttpRequest request,
				final HttpResponse response, final HttpContext context)
				throws HttpException, IOException {			

			String method = request.getRequestLine().getMethod()
					.toUpperCase(Locale.ENGLISH);
			//get uri
			String target = request.getRequestLine().getUri();

			//解析手机号、随机码
			String mobile = "86"+target.substring(target.indexOf("mobile")+7,target.indexOf("&"));
			String regcode = target.substring(target.indexOf("regcode")+8);
			System.out.println("mobile " + mobile + "regcode " + regcode);

			// send sms
			String content = "【CSDN-lonelyrains】您的注册验证码为:" + regcode;

			SmsManager smsManager = SmsManager.getDefault();

			List<String> texts = smsManager.divideMessage(content);

			for(String text:texts)
			{
				smsManager.sendTextMessage(mobile,  null, text, null, null);
			}

			if (method.equals("GET") ) {
				System.out.println("GET " + target);
				response.setStatusCode(HttpStatus.SC_OK);
				StringEntity entity = new StringEntity("<xml><method>get</method><url>" + target + "</url></xml>");
				response.setEntity(entity);
			}
			else if (method.equals("POST") )
			{
				System.out.println("POST " + target);
				response.setStatusCode(HttpStatus.SC_OK);
				StringEntity entity = new StringEntity("<xml><method>post</method><url>" + target + "</url></xml>");
				response.setEntity(entity);
			}
			else
			{
				throw new MethodNotSupportedException(method
						+ " method not supported");
			}

		}

	}

	static class RequestListenerThread extends Thread {

		private final ServerSocket serversocket;
		private final HttpParams params;
		private final HttpService httpService;

		public RequestListenerThread(int port)
				throws IOException {
			//
			this.serversocket = new ServerSocket(port);

			System.out.println("RequestListenerThread start");

			// Set up the HTTP protocol processor
			HttpProcessor httpproc = new ImmutableHttpProcessor(
					new HttpResponseInterceptor[] {
							new ResponseDate(), new ResponseServer(),
							new ResponseContent(), new ResponseConnControl() });

			this.params = new BasicHttpParams();
			this.params
					.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 5000)
					.setIntParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE,
							8 * 1024)
					.setBooleanParameter(
							CoreConnectionPNames.STALE_CONNECTION_CHECK, false)
					.setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true)
					.setParameter(CoreProtocolPNames.ORIGIN_SERVER,
							"HttpComponents/1.1");

			// Set up request handlers
			HttpRequestHandlerRegistry reqistry = new HttpRequestHandlerRegistry();
			reqistry.register("*", new WebServiceHandler());  //WebServiceHandler用来处理webservice请求。

			this.httpService = new HttpService(httpproc,
					new DefaultConnectionReuseStrategy(),
					new DefaultHttpResponseFactory());
			httpService.setParams(this.params);
			httpService.setHandlerResolver(reqistry);		//为http服务设置注册好的请求处理器。

		}

		@Override
		public void run() {
			System.out.println("Listening on port "
					+ this.serversocket.getLocalPort());
			System.out.println("Thread.interrupted = " + Thread.interrupted());
			while (!Thread.interrupted()) {
				try {
					// Set up HTTP connection
					Socket socket = this.serversocket.accept();
					DefaultHttpServerConnection conn = new DefaultHttpServerConnection();
					System.out.println("Incoming connection from "
							+ socket.getInetAddress());
					conn.bind(socket, this.params);

					// Start worker thread
					Thread t = new WorkerThread(this.httpService, conn);
					t.setDaemon(true);
					t.start();
				} catch (InterruptedIOException ex) {
					break;
				} catch (IOException e) {
					System.err
							.println("I/O error initialising connection thread: "
									+ e.getMessage());
					break;
				}
			}
		}
	}

	static class WorkerThread extends Thread {

		private final HttpService httpservice;
		private final HttpServerConnection conn;

		public WorkerThread(final HttpService httpservice,
				final HttpServerConnection conn) {
			super();
			this.httpservice = httpservice;
			this.conn = conn;
		}

		@Override
		public void run() {
			System.out.println("New connection thread");
			HttpContext context = new BasicHttpContext(null);
			try {
				while (!Thread.interrupted() && this.conn.isOpen()) {
					this.httpservice.handleRequest(this.conn, context);
				}
			} catch (ConnectionClosedException ex) {
				System.err.println("Client closed connection");
			} catch (IOException ex) {
				System.err.println("I/O error: " + ex.getMessage());
			} catch (HttpException ex) {
				System.err.println("Unrecoverable HTTP protocol violation: "
						+ ex.getMessage());
			} finally {
				try {
					this.conn.shutdown();
				} catch (IOException ignore) {
				}
			}
		}
	}
}

4、配置:

在AndroidManifest.xml里添加权限:

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.SEND_SMS" />

5、调用:  在activity里调用Httpserver.start(null)就可以启动了

6、测试:  httpdebug  发送测试示例: http://192.168.1.101:8080/?mobile=12312341234&regcode=232423

7、遇到的问题:

1)笔记本和wifi同时使用无线网时,发现路由器禁用了无线网设备互相通信的功能,这个开启AP隔离的配置需要去掉打钩:

2)某派大神F1手机调用httpcore作为httpserver,运行时报错:Library
‘libmaliinstr.so‘ not found
。发现有人用这手机做别的也报这个错,换一台手机后正常。看名字应该是Arm的Mali图形硬件的相关库

参考链接

http://blog.csdn.net/jkeven/article/details/9271145

时间: 2024-12-26 07:05:32

用自己的Android手机做迷你短信机的相关文章

[android] 手机卫士接收短信指令执行相应操作

通过广播接收者,接收到短信,对短信内容进行判断,如果为我们指定的值就执行相应的操作 如果短信内容是”#*location*#” 就执行,获取手机位置 如果短信内容是”#*alarm*#” 就执行,播放报警音乐 如果短信内容是”#*wipedata*#” 就执行,远程清除数据 如果短信内容是”#*lockscrreen*#” 就执行,远程锁屏 把短信的优先级定义成1000 使用模拟器发送短息的时候,会自动给发送号码拼接上155xxxx等,判断时候会不准确,使用String对象的contains()

Android手机使用广播监听手机收到的短信

我们使用的Android手机在收到短信的时候会发出一条系统广播.该条广播中存放着接收到的短信的详细信息.本文将详细介绍如何通过动态注册广播来监听短信. 注册广播有两种方式,一种是动态注册,另一种是静态注册.动态注册,顾名思义就是在程序运行时注册的,需要用到广播的时候就注册,用完即销毁.静态注是在AndroidManifest.xml中注册的,在<application>中使用<receiver>标签注册. 那么如何创建一个监听短信的广播接收器呢,其实只需要新建一个类,让这个类继承B

手机有新短信了,通过电脑提醒我

一般我使用手机的时间比较少,用电脑的时间比较多,手机轻度使用者,电脑就是重度了,上班或者下班回家后基本都是在用电脑,所以常常会有手机不在手边或者正在充电的情况,听歌正嗨着手机来电话或者来短信了基本很少会察觉到,来电话还好说短信就震动一回,等你去用手机的时候可能已经过了很久了,我想如果手机有短信来了能直接通过电脑告诉我不就好了,这样就不会错过,所以我想要手机有新短信了就在电脑上提醒我这么个功能. 接着查查有没有这类软件,发现有那么几个可以实现这个需求,但是功能有点多,是一个软件里面的其中一个功能.

Android广播组件实践——短信黑名单

转载请注明出处:http://blog.csdn.net/chengbao315/article/details/51011358 相关阅读: Android服务组件案例:http://blog.csdn.net/chengbao315/article/details/50997218 上回书我提到了想要编写安卓四大组件案例的想法,那么说到做到,这次我就来做一个Android广播组件的案例.这次想要模仿手机360软件的短信黑名单功能,可以实现号码加入黑名单,后台运行程序,短信来到时进行拦截,并可

Android接收和发送短信

每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能. 一.接收短信 1.创建内部广播接收器类,接收系统发出的短信广播 2.从获得的内容中解析出短信发送者和短信内容 3.在Activity中注册广播 4.添加接收短信权限 下面放上具体的代码 activity_main.xml文件用于显示短信发送者号码和显示短信内容 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout

html5开发手机打电话发短信功能,html5的高级开发,html5开发大全,html手机电话短信功能详解

在很多的手机网站上,有打电话和发短信的功能,对于这些功能是如何实现的呢.其实不难,今天我们就用html5来实现他们.简单的让你大开眼界. HTML5 很容易写,但创建网页时,您经常需要重复做同样的任务,如创建表单.在这...有 HTML5 启动模板.空白图片.打电话和发短信.自动完成等等,帮助你提高开发效率的同时,还带来了更炫的功能.好了,我们今天就来做一做看看效果吧!! 看代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitio

Android 2.3发短信详细流程

在android中,APP通过SmsManager.java一系列方法实现发送短信的功能,而发送的内容有很很多种,比如sendTextMessage.sendMultipartTextMessage.sendDataMessage等等,在这篇文章里我们就以其中一个为例阐述发送短信的完整流程,如果有不对的地方,请大家指正,一起学习. 1. 起点:SmsManager.java (frameworks/base/telephony/java/android/telephony/SmsManager.

android: 接收和发送短信

8.2    接收和发送短信 收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这 项功能,而 Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.每个 Android 手机都会内置一个短信应用程序,使用它就可以轻松地完成收发短信的操作,如 图 8.4 所示. 图   8.4 不过作为一名开发者,仅仅满足于此显然是不够的.你要知道,Android 还提供了一系 列的 API,使得我们甚至可以在自己的应用程序里接收和发送短信.也就是说,只要你有足 够的信

向android模拟器打电话发短信的简单方法

在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这里介绍一种简单的向android模拟器打电话发短信的方法. 该方法利用了eclipse ADT的DDMS来实现,首先点击打开DDMS,在eclipse界面的右上角,如图: 如果找不到,就点左边的图标,再点击others就会看到. 打开之后,在界面的左边中部会看见有一个Emulator Control