好友定位宝iphone通话录音音自动录音?

iphone如何实现自动通话录音功能?ios8实现iphone通话录音功能步骤
互联网 & 发布时间: 10:18:17 & 作者:佚名 &
iphone如何实现自动通话录音功能??ios8相信很多果粉们对这个问题都不太清楚吧,其实方法也很简单的。下面小编就为大家带来ios8实现iphone通话录音功能步骤,有需要的朋友可以过来参考一下哦
  苹果手机不能实现通话录音这一诟病,一直都是广大苹果用户比较纠结的地方。那么iphone如何实现自动通话录音功能?现在,在ios8中我们可以通过一些插件工具来实现iPhone手机的通话录音。下面小编就为大家带来ios8实现iphone通话录音功能步骤,有需要的朋友可以过来参考一下哦!
  步骤1:在App Store中搜索下载&录音存证宝&应用。
  步骤2:打开这个应用工具后会先提示你用自己的手机号注册,并设置一个手势密码,然后就可进入软件主界面了。
  步骤3:点击主界面上的&通话录音&进入后,调出拨号盘拨号连接对方,点下&录音呼叫&按钮通话。这个过程中软件即会自动开始录音。
  步骤4:通话结束后在通话记录里即可找到录音记录,点击&录音文件&进入后选择相应时间段的录音即可下载。
 && 以上就是ios8实现iphone通话录音功能步骤,大家看明白了吗?希望这篇文章对大家有所帮助!
大家感兴趣的内容
12345678910
最近更新的内容通话都能录音!录音利器录音宝App体验
  语音技术哪家强?就在中国来说,讯飞还是非常顶尖的。不过很多人也许并不知道,讯飞除了语音、语音助手等产品外,也有推出录音App&&录音宝。根据官方介绍,录音宝拥有录音转文字、随时打点标记乃至通话录音等功能,可谓非常实用。讯飞语音技术方面的优势,在录音领域表现得如何?今天就让我们一起来看看录音宝App体验如何吧。软件名称:录音宝软件版本:1.5.1122 官方版软件大小:5.09MB软件授权:免费适用平台:Android下载地址:&&|&  录音宝:简单易用的界面  录音宝的界面得非常简单,并没有采用复杂的拟物化设计。不少录音App都喜欢用拟真的麦克风、录音带之类的图像作为界面,非常精致,录音宝并没有采用类似的设计。不过,录音宝的现代化设计让使用变得更简单的同时,界面也显示了更多的信息。比如说,能够显示录音时长、剩余电量和存储容量等,实用性十足。此外,录音宝还能够在通知中心显示录音按钮,快速录音非常方便。录音宝界面,相当简洁易用  录音宝:全面又颇具特色的功能  ◆媒体朋友的绝配  如果只是简单地录制音频,相信大多数用户都不会选择去专门安装一款录音App。对录音App需求旺盛最大的群体,也许就是经常进行采访的媒体记者朋友了。在录制访谈内容这方面,录音宝的功能还是相当强大的。录音宝拥有防打扰和打标记功能,录音文件还会有地点标识,方便整理  在进行访谈时,首先最希望避免的尴尬情况,莫过于就是突然有来电、短信、App推送之类的行径突然将访谈打断。对此,录音宝提供了防打扰功能。既然是进行访谈,就不会只问一两个问题,这时候录音宝的打点标记功能就发挥作用了。只需要轻点按钮,就可以为录音加入一个个标记点,在访谈结束后整理录音内容效率无疑大大提升。录音文件可以分享和进行备注,录音本身还能够语音转文字!  语音识别技术是讯飞的一大优势,这个优势也涵盖到了录音宝中。如果访谈对象不止一个,录音宝能够自动识别区分不同对象的录音内容,非常方便。此外,对于媒体朋友来说,下面这个才是神功能!录音宝能够自动将录音内容转换成为文字,省去了你事后听写的功夫!忙于出稿的记者朋友,这就是神器啊!录音转文字无疑是媒体记者朋友出稿的神器啊!  当然,这些功能并不只对媒体朋友们有用。如果你是学生党,也可以用录音宝录制讲课和讲座的内容。配合打点标记、录音转文字等功能,同样效果拔群!  ◆通话内容别错过  虽然说通话录音在某些国家是非法的,但在中国还是有很多朋友有这个需求的。录音宝带有通话录音功能,经过检测机型匹配和软件冲突后,就可以开启。不过,由于通话录音在美国是非法的,安卓并没有提供原生的通话录音API,所以录音宝的通话录音功能并不能保证在所有的安卓机型中都能够正常工作。拥有通话录音功能,可以匹配机型选择录音模式增加成功率可以选择通话录音的联系人  如果你用的是,也许通话录音功能可用的概率比较大。录音宝的通话录音功能用起来很简单,通话时会自动录下双方的通话内容,无需手动操作。同时,你也能够手动选取需要通话录音的联系人,给了用户更多选择的余地。通话录音完成后,会用不同的标志和普通的录音文件区分开,查阅起来还是挺方便的。  总结  录音宝的功能令人满意,基本涵盖了各类用户的需求,相信大家都会有用得到录音宝的场合。录音宝发挥了讯飞的技术优势,带来了录音转文字这样用户体验出色的功能。更难得可贵的是,这些功能用起来都相当傻瓜化,比如说通话录音,无需像同类App那样需要root,给用户设置使用门槛。如果你需要一款好用、有用的录音App,不妨尝试一下录音宝吧。相关阅读:情怀指数几何?锤子日历安卓版发布美轮美奂!安卓手表允许第三方定制表盘亲儿子升级就是快!N4/N6升级安卓5.0.1有没有被他人乱动?实用小工具Trust&
最新资讯离线随时看
聊天吐槽赢奖品
相关软件:
大小:1.93 MB
授权:免费
大小:62.51 MB
授权:免费智能自动通话录音 1.1.12
投诉建议:
千万流量共享 百度高权重排名
软件大小: 3.58M
软件厂商:
TravelDiary
软件语言: 简体中文
软件授权: 免费
软件评级:
更新时间:
编辑推荐:
智能自动通话录音1.1.12应用截图
当你想录音时,还在按录音按钮吗? 从现在开始智能录音吧。 是不是有时候会想不起和对方的通话内容呢? 那么现在开始智能录音吧。 对方是不是会忘记在电话中的约定? 那么现在开始智能录音吧。 当不记得通话内容时,当想要是非分明时,当想再听一遍爱人的声音时,请使用一次这个软件。 那么你的生活也将变得更加智能。 ###############NOTICE#################Galaxy Nexus mobile phone does not have the capability of recording. This is not supported.智能自动通话录音 1.1.12 更新内容更稳定、更优质,邀您一起体验。
*应用权限:
允许应用程序监视、修改外拨电话
允许应用程序读取电话状态
允许应用程序录制音频
允许应用程序写入外部存储,如SD卡上写文件
允许应用程序读取联系人通讯录信息
允许应用程序读取扩展存储器
允许访问振动设备
允许应用程序访问网络连接
允许应用程序获取网络信息状态
允许应用程序访问GMail账户列表
允许应用程序访问Wi-Fi网络状态信息
允许应用程序读取或写入系统设置
允许应用程序修改全局音频设置
今日更新推荐
同类软件下载排行
热门关键词android 通话自动录音服务 - 简书
android 通话自动录音服务
①:通话自动录音;
②:无界面,只是一个service;
③:录音自动压缩上传;
④:当用户清理后台的时候,要求service不可以被杀死;
⑤:稳定性:1、无网络的情况下;2、上传失败;3、服务报错。
解决方案:
①:通话自动录音
启动一个service,监听用户手机通话状态,当检测到用户处于通话状态下,立即开始录音,通话结束后,停止录音,并保存文件。
此功能的前提条件:
1、录音权限、读写存储空间的权限、读取通话状态的权限;
2、Service不可以被停止,否则无法录音。
3、开机启动(不可以让用户每次开机都主动去打开服务)
②:无界面,只是一个service
普通的service,监听开机广播,当用户开机的时候,启动service。但是,发现service并没有启动。想要启动一个service,必须要有一个activity,即使你不打开这个activity。
在真正做项目的时候,PM会提出各种你不能理解的需求,比如说本系统,PM要求本应用只是一个录音服务,不可以有任何界面,也不可以在手机桌面上出现应用图标。因此,方案①不可行。
Android手机在设置里面都一个辅助功能(个别手机也叫:无障碍),利用这个我们可以实现一些强大的功能,前提是用户开启我们的辅助功能,抢红包软件就是利用辅助功能实现的。
这里写图片描述
这里写图片描述
③:录音自动压缩上传
我们只需要在上传之前对文件进行压缩处理,然后再上传即可。
④:当用户清理后台的时候,要求service不可以被杀死
不会被杀死的服务,或许只有系统服务吧。当然类似于QQ、微信他们做的这种全家桶也可以做到。大公司是可以和厂商合作的,他们的应用可以不那么容易被杀死。当然也不提倡这样做,这样就是垃圾软件,破坏了Android开发的美好环境。
其实,如果可以把服务设置成系统服务,那么只要用户不主动在辅助功能页面关掉服务,后台是清理不掉改服务的。本人在小米手机上测试过,设置成系统级别的服务后,当清理后台的时候,即使服务被杀死,也会非常快的重新启动。(感兴趣的同学可以试一下)
⑤:稳定性:1、无网络的情况下;2、上传失败;3、服务报错
当无网络的情况下,把录音文件的地址保存下来(保存的方式有很多:Sqlite、Sharedpreferences等等),上传失败也一样,失败的原因可能有很多种:网络断开、接口报错等,当网络恢复的时候,可以重新上传,这样就不会丢失录音文件。
代码很简单,注释很详细:
项目的结构:
这里写图片描述
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /&
&uses-permission android:name="android.permission.RECORD_AUDIO" /&
&!-- 要存储文件或者创建文件夹的话还需要以下两个权限 --&
&uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&
&uses-permission android:name="android.permission.INTERNET"/&
&!--允许读取网络状态--&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&
&!--允许读取wifi网络状态--&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/&
android:name=".service.RecorderService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"&
&intent-filter&
&action android:name="android.accessibilityservice.AccessibilityService" /&
&/intent-filter&
&meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessible_service_config" /&
&/service&
* 电话自动录音辅助服务(去电、来电自动录音并上传)。
* Created by wang.ao in .
public class RecorderService extends AccessibilityService {
private static final String TAG = "RecorderService";
private static final String TAG1 = "手机通话状态";
* 音频录制
private MediaR
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
* 监听拨号广播,以便获取用户拨出的电话号码
private OutCallReceiver outCallR
private IntentFilter intentF
* 网络状态改变广播,当网络畅通的状态下,把用户未上传的录音文件都上传掉
private NetworkConnectChangedReceiver networkConnectChangedR
private IntentFilter intentFilter2;
* 当前通话对象的电话号码
private String currentCallNum = "";
* 区分来电和去电
private int previousStats = 0;
* 当前正在录制的文件
private String currentFile = "";
* 保存未上传的录音文件
private SharedPreferences unUploadF
private String dirPath = "";
private boolean isRecording =
protected void onServiceConnected() {
Log.i(TAG, "onServiceConnected");
Toast.makeText(getApplicationContext(), "自动录音服务已启动", Toast.LENGTH_LONG).show();
public void onAccessibilityEvent(AccessibilityEvent event) {
// TODO Auto-generated method stub
Log.i(TAG, "eventType " + event.getEventType());
public void onInterrupt() {
// TODO Auto-generated method stub
Log.i(TAG, "onServiceConnected");
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
public void onCreate() {
super.onCreate();
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
// 监听电话状态
tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);
outCallReceiver = new OutCallReceiver();
intentFilter = new IntentFilter();
//设置拨号广播过滤
intentFilter.addAction("android.intent.action.NEW_OUTGOING_CALL");
registerReceiver(outCallReceiver, intentFilter);
//注册拨号广播接收器
networkConnectChangedReceiver = new NetworkConnectChangedReceiver();
intentFilter2 = new IntentFilter();
//设置网络状态改变广播过滤
intentFilter2.addAction("android.net.conn.CONNECTIVITY_CHANGE");
intentFilter2.addAction("android.net.wifi.WIFI_STATE_CHANGED");
intentFilter2.addAction("android.net.wifi.STATE_CHANGE");
//注册网络状态改变广播接收器
registerReceiver(networkConnectChangedReceiver, intentFilter2);
unUploadFile = getSharedPreferences("un_upload_file", 0);
unUploadFile.edit().putString("description", "未上传的录音文件存放路径").commit();
dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/com.ct.phonerecorder/";
public void onDestroy() {
super.onDestroy();
Toast.makeText(getApplicationContext(), "进程被关闭,无法继续录音,请打开录音服务", Toast.LENGTH_LONG).show();
if (outCallReceiver != null) {
unregisterReceiver(outCallReceiver);
if (networkConnectChangedReceiver != null) {
unregisterReceiver(networkConnectChangedReceiver);
class MyListener extends PhoneStateListener {
public void onCallStateChanged(int state, String incomingNumber) {
// TODO Auto-generated method stub
Log.d(TAG1, "空闲状态" + incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Log.d(TAG1, "空闲");
if (recorder != null && isRecording) {
recorder.stop();// 停止录音
recorder.release();
recorder =
Log.d("电话", "通话结束,停止录音");
uploadFile(currentFile);
isRecording =
case TelephonyManager.CALL_STATE_RINGING:
Log.d(TAG1, "来电响铃" + incomingNumber);
// 进行初始化
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d(TAG1, "摘机" + (!incomingNumber.equals("") ? incomingNumber : currentCallNum));
initRecord(!incomingNumber.equals("") ? incomingNumber : currentCallNum);
// 开始录音
if (recorder != null) {
recorder.start();
isRecording =
super.onCallStateChanged(state, incomingNumber);
* 当录音结束后,自动上传录音文件。
* ①网络可用:直接上传;
* ②网络不可用:保存文件路径,待网络可用的时候再进行上传;
* ③上传失败的文件,也保存文件路径,或者重新上传。
public void uploadFile(String file) {
ZipUtils.zipFile(dirPath + file, dirPath + file + ".zip");
if (NetWorkUtils.isNetworkConnected(getApplicationContext())) {
//上传文件
OkHttpUtils.postFile()
saveUnUploadFIles(dirPath + file + ".zip");
* 保存未上传的录音文件
* @param file 未上传的录音文件路径
private void saveUnUploadFIles(String file) {
String files = unUploadFile.getString("unUploadFile", "");
if (files.equals("")) {
StringBuilder sb = new StringBuilder(files);
files = sb.append(";").append(file).toString();
unUploadFile.edit().putString("unUploadFile", files).commit();
* 上传因为网络或者其他原因,暂未上传或者上传失败的文件,重新上传
public void uploadUnUploadedFiles() {
//获取当前还未上传的文件,并把这些文件上传
String files = unUploadFile.getString("unUploadFile", "");
unUploadFile.edit().putString("unUploadFile", "").commit();
if (files.equals("")) {
String[] fileArry = files.split(";");
int len = fileArry.
for (String file : fileArry) {
upload(file);
* 文件上传
* @param file 要上传的文件
public void upload(final String file) {
File file1 = new File(file);
if (file1 == null || !file1.exists()) {
//文件不存在
if (!NetWorkUtils.isNetworkConnected(getApplicationContext())) {
saveUnUploadFIles(file);
Map&String, String& map = new HashMap&String, String&();
map.put("type", "1");
final String url = "http://192.168.1.158:8082/uploader";
OkHttpUtils.post()//
.addFile("mFile", file1.getName(), file1)//
.url(url)//
.params(map).build()//
.execute(new StringCallback() {
public void onResponse(String response, int id) {
Log.e(TAG, "成功 response=" + response);
public void onError(Call call, Exception e, int id) {
Log.e(TAG, "失败 response=" + e.toString());
saveUnUploadFIles(file);
* 初始化录音机,并给录音文件重命名
* @param incomingNumber 通话号码
private void initRecord(String incomingNumber) {
previousStats = TelephonyManager.CALL_STATE_RINGING;
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);// Microphone
recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);// 设置输出3gp格式
File out = new File(dirPath);
if (!out.exists()) {
out.mkdirs();
recorder.setOutputFile(dirPath
+ getFileName((previousStats == TelephonyManager.CALL_STATE_RINGING ? incomingNumber : currentCallNum))
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 设置音频编码格式
recorder.prepare();// 做好准备
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
* 获取录音文件的名称
* @param incomingNumber 通话号码
* @return 获取录音文件的名称
private String getFileName(String incomingNumber) {
Date date = new Date(System.currentTimeMillis());
currentFile = incomingNumber + " " + dateFormat.format(date) + ".mp3";
return currentF
* 拨号广播接收器,并获取拨号号码
public class OutCallReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.d(TAG1, "当前手机拨打了电话:" + currentCallNum);
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
currentCallNum = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.d(TAG1, "当前手机拨打了电话:" + currentCallNum);
Log.d(TAG1, "有电话,快接听电话");
* 网络状态change广播接收器
public class NetworkConnectChangedReceiver extends BroadcastReceiver {
private static final String TAG = "network status";
public void onReceive(Context context, Intent intent) {
* 这个监听网络连接的设置,包括wifi和移动数据的打开和关闭。.
* 最好用的还是这个监听。wifi如果打开,关闭,以及连接上可用的连接都会接到监听。见log
* 这个广播的最大弊端是比上边两个广播的反应要慢,如果只是要监听wifi,我觉得还是用上边两个配合比较合适
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
ConnectivityManager manager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
Log.i(TAG, "CONNECTIVITY_ACTION");
NetworkInfo activeNetwork = manager.getActiveNetworkInfo();
if (activeNetwork != null) { // connected to the internet
if (activeNetwork.isConnected()) {
//当前网络可用
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
// connected to wifi
Log.e(TAG, "当前WiFi连接可用 ");
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
// connected to the mobile provider's data plan
Log.e(TAG, "当前移动网络连接可用 ");
uploadUnUploadedFiles();
Log.e(TAG, "当前没有网络连接,请确保你已经打开网络 ");
// not connected to the internet
Log.e(TAG, "当前没有网络连接,请确保你已经打开网络 ");
* 获取网络连接状态工具类
* Created by wang.ao in .
public class NetWorkUtils {
* 判断是否有网络连接
* @param context
public static boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
* 判断WIFI网络是否可用
* @param context
public static boolean isWifiConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWiFiNetworkInfo = mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWiFiNetworkInfo != null) {
return mWiFiNetworkInfo.isAvailable();
* 判断MOBILE网络是否可用
* @param context
public static boolean isMobileConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mMobileNetworkInfo = mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mMobileNetworkInfo != null) {
return mMobileNetworkInfo.isAvailable();
* 获取当前网络连接的类型信息
* @param context
public static int getConnectedType(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
return mNetworkInfo.getType();
return -1;
* 获取当前的网络状态 :没有网络0:WIFI网络1:3G网络2:2G网络3
* @param context
public static int getAPNType(Context context) {
int netType = 0;
ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo == null) {
return netT
int nType = networkInfo.getType();
if (nType == ConnectivityManager.TYPE_WIFI) {
netType = 1;// wifi
} else if (nType == ConnectivityManager.TYPE_MOBILE) {
int nSubType = networkInfo.getSubtype();
TelephonyManager mTelephony = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
if (nSubType == TelephonyManager.NETWORK_TYPE_UMTS
&& !mTelephony.isNetworkRoaming()) {
netType = 2;// 3G
netType = 3;// 2G
return netT
public class ZipUtils {
private static final int BUFF_SIZE = 1024;
* @param zos
* @param parentDirName 父目录
* @param file
待压缩文件
* @param buffer
URL:http://www.bianceng.cn/OS/extra/20.htm
* @return 只要目录中有一个文件压缩失败,就停止并返回
private static boolean zipFile(ZipOutputStream zos, String parentDirName, File file, byte[] buffer) {
String zipFilePath = parentDirName + file.getName();
if (file.isDirectory()) {
zipFilePath += File.
for (File f : file.listFiles()) {
if (!zipFile(zos, zipFilePath, f, buffer)) {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry zipEntry = new ZipEntry(zipFilePath);
zipEntry.setSize(file.length());
zos.putNextEntry(zipEntry);
while (bis.read(buffer) != -1) {
zos.write(buffer);
bis.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
* @param srcPath 待压缩的文件或目录
* @param dstPath 压缩后的zip文件
* @return 只要待压缩的文件有一个压缩失败就停止压缩并返回(等价于windows上直接进行压缩)
public static boolean zipFile(String srcPath, String dstPath) {
File srcFile = new File(srcPath);
if (!srcFile.exists()) {
byte[] buffer = new byte[BUFF_SIZE];
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dstPath));
boolean result = zipFile(zos, "", srcFile, buffer);
zos.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
* @param srcPath 待解压的zip文件
* @param dstPath zip解压后待存放的目录
* @return 只要解压过程中发生错误,就立即停止并返回(等价于windows上直接进行解压)
public static boolean unzipFile(String srcPath, String dstPath) {
if (TextUtils.isEmpty(srcPath) || TextUtils.isEmpty(dstPath)) {
File srcFile = new File(srcPath);
if (!srcFile.exists() || !srcFile.getName().toLowerCase(Locale.getDefault()).endsWith("zip")) {
File dstFile = new File(dstPath);
if (!dstFile.exists() || !dstFile.isDirectory()) {
dstFile.mkdirs();
ZipInputStream zis = new ZipInputStream(new FileInputStream(srcFile));
BufferedInputStream bis = new BufferedInputStream(zis);
ZipEntry zipEntry =
byte[] buffer = new byte[BUFF_SIZE];
if (!dstPath.endsWith(File.separator)) {
dstPath += File.
while ((zipEntry = zis.getNextEntry()) != null) {
String fileName = dstPath + zipEntry.getName();
File file = new File(fileName);
File parentDir = file.getParentFile();
if (!parentDir.exists()) {
parentDir.mkdirs();
FileOutputStream fos = new FileOutputStream(file);
while (bis.read(buffer) != -1) {
fos.write(buffer);
fos.close();
bis.close();
zis.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
Android 开发工程师
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
pdf下载地址:Java面试宝典 第一章内容介绍 20 第二章JavaSE基础 21 一、Java面向对象 21 1. 面向对象都有哪些特性以及你对这些特性的理解 21 2. 访问权限修饰符public、private、protected, 以及不写(默认)时的区别(201...
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
用到的组件 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友...
我不是诗人 但是却想为你写诗 你是诗里最美好的意象 想让你出现在诗的每一页 我不是歌者 但是却想为你歌唱 你是歌中最悠扬的旋律 我要把我唱给你听 我不是画家 但是却想为你临摹 你是画上最曼妙的曲线 落款时还惦记着你
01 文具跨界,真的是文具店的出路吗 我们现在做文具的实体店都遇到的一个比较困难的时期,无论是互联网电商的冲击,还是消费者的消费观念改变,都给各个行业都带来很大的一个冲击。 但是同时由这种冲击的存在,我们每个人都面临着很多新的机会,对于我们每个人来讲也是最好的时代,我们可以...
《东狭西谷》 《赢旦儿哥》 《走出匠乡》 《墨斗》 《赢旦儿》 《墨斗》 《跨出鲁班壑》 《廊桥工匠》 《还愿》 《大迁徙》 《金鹰的工匠传奇》 《大国小工匠》 《工匠》 《走出匠乡的金鹰》 《没有寄出的情书》 《一个墨斗两条线》 《匠行》 《瑞翡克的匠人》 《女娲工匠》
也不知道这样究竟过了多少个夜晚,细想一下,也数的过来。 喜欢的,不喜欢的,有兴趣的,没兴趣的,都是惘然,都是价值连城。 充实时充实,落寞时落寞。 有一人,伴你,听你说,是为一乐事。 既是于事而乐,更是于人而乐。
2018年开始了,一场大雪,让我们回想起了10年前的2008年,那一年也是罕见的大学,从北到南,雪景,变成了雪灾。当年最大的困难,就是春节的回家路,记得自己托人找关系从客运站坐上前往阜阳的客车,司机一路狂飙,车上人提着一颗心,居然,没人制止,估计是太想回家了。然后再从阜阳转...}

我要回帖

更多关于 电话通话录音 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信