js访问对方手机文件夹_浏览器端javascript调用手机终端本地功能实现02-功能点汇总...

1 //

2 //QMViewController.m3 //QMWebView4 //

5 //Created by Qimeng Tech on 14-7-15.6 //Copyright (c) 2014年 Qimeng Tech. All rights reserved.7 //8

9 #import "QMViewController.h"

10 #import "QMUtil.h"

11 #import "SecurityUtil.h"

12 #import "JSONKit.h"

13 #import "FileUtil.h"

14 #import "Toast+UIView.h"

15 #import "MLAudioRecorder.h"

16 #import "AmrRecordWriter.h"

17 #import

18 #import "MLAudioMeterObserver.h"

19

20 @interfaceQMViewController ()21 @property (nonatomic, strong) MLAudioRecorder *recorder;22 @property (nonatomic, strong) AmrRecordWriter *amrWriter;23

24 @property (nonatomic, strong) AVAudioPlayer *player;25

26 @property (nonatomic, copy) NSString *filePath;27 @property (weak, nonatomic) IBOutlet UIButton *recordButton;28 @property (nonatomic, strong) MLAudioMeterObserver *meterObserver;29 @property (nonatomic,strong) NSTimer *timerStopRecord;30 @property (nonatomic,assign) inttimerStopNum;31 @end

32

33 @implementationQMViewController34 @synthesizecurrentParams,webView;35 @synthesizecurrentUploadPhotoNum,selectMultiUploadPhotoUrls;36 - (void)viewDidLoad37 {38 [super viewDidLoad];39 self.title=@"启梦浏览器";40 if( ([[[UIDevice currentDevice] systemVersion] doubleValue]>=7.0)) {41 self.edgesForExtendedLayout =UIRectEdgeNone;42 self.extendedLayoutIncludesOpaqueBars =NO;43 self.modalPresentationCapturesStatusBarAppearance =NO;44 }45 self.webView=[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, UI_SCREEN_HEIGHT-20-44)];46 self.webView.delegate=self;47 [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://10.1.2.123/webview/"]]];48 [self.view addSubview:self.webView];49

50 self.selectMultiUploadPhotoUrls=[[NSMutableArray alloc] init];51 //Do any additional setup after loading the view, typically from a nib.

52 }53 #pragma mark --

54 #pragma mark UIWebViewDelegate

55 /**56 *截获特殊请求url,完成js与本地交互57 */

58 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {59

60 NSString *requestString =[[request URL] absoluteString];61 NSArray *components = [requestString componentsSeparatedByString:@":"];62 NSRange range=[[components objectAtIndex:1] rangeOfString:@"QM_APP_WEBVIEW_ENGINE"];63 if ([components count] > 3 && range.location == 2 && range.length == 21) {64 NSString *cmd=(NSString *)[components objectAtIndex:2];65 //上传参数1、请求地址;2、成功回调函数;3、失败回调函数

66 NSArray *params=[[components objectAtIndex:3] componentsSeparatedByString:@","];67 //请求相册列表

68 self.currentParams=params;69 if([cmd isEqualToString:JS_CMD_NAME_ALBUM]){70 [QMUtil LocalPhotos:self delegate:self];71 //调用摄像头

72 }else if([cmd isEqualToString:JS_CMD_NAME_CAMERA]){73 [QMUtil takeCamera:self delegate:self];74 //请求相册列表-多选

75 }else if([cmd isEqualToString:JS_CMD_NAME_request_albums_multi]){76 [FileUtil cleaerImgAreaDirectory];77 [FileUtil createImgAreaUploadDirectory];78 [self.selectMultiUploadPhotoUrls removeAllObjects];79 self.currentUploadPhotoNum=0;80 [QMUtil LocalPhotosSelectMulti:self delegate:self];81 }else if([cmd isEqualToString:JS_CMD_NAME_request_albums_multi_upload]){82 if (self.selectMultiUploadPhotoUrls.count>0) {83 [NetWorkUtil uploadFile:[NSString stringWithFormat:@"http://%@",[self.currentParams objectAtIndex:0]] localFilePath:[self.selectMultiUploadPhotoUrls objectAtIndex:0] uploadDelegate:self params:nil code:@"upload_photos_multi"];84 }else{85 [self.view makeToast:@"没有选择上传图片,无法上传" duration:2.0 position:@"center"];86 }87 //录制音频

88 }else if([cmd isEqualToString:@"start_record"]){89 if(self.amrWriter==nil){90 [self initRecorder];91 }92 if(self.recorder.isRecording) {93 //取消录音

94 [self.view makeToast:@"正在录音中,请先停止" duration:2.0 position:@"center"];95 }else{96 //开始录音

97 [self.recorder startRecording];98 self.meterObserver.audioQueue = self.recorder->_audioQueue;99 //防止用户不停止,录音会一直继续下去

100 self.timerStopNum=0;101 self.timerStopRecord=[NSTimer scheduledTimerWithTimeInterval:10.0target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];102 }103 }else if([cmd isEqualToString:@"stop_record"]){104 if(self.amrWriter==nil){105 [self initRecorder];106 }107 if(self.recorder.isRecording) {108 //取消录音

109 [self.recorder stopRecording];110 if(self.timerStopRecord!=nil){111 [self.timerStopRecord invalidate];112 self.timerStopRecord=nil;113 }114 }else{115 [self.view makeToast:@"还没开始录音" duration:2.0 position:@"center"];116 }117 }else if([cmd isEqualToString:@"play_record"]){118 if(self.player==nil){119 self.player =[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:self.filePath] error:nil];120 }121 NSLog(@"%@",self.filePath);122 if([self.player isPlaying]){123 [self.view makeToast:@"正在播放中,请先停止" duration:2.0 position:@"center"];124 }else{125 [self.player play];126 }127 }else if([cmd isEqualToString:@"stop_play"]){128 if(self.player==nil){129 self.player =[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:self.filePath] error:nil];130 }131 NSLog(@"%@",self.filePath);132 if([self.player isPlaying]){133 [self.player stop];134 }135 }else if([cmd isEqualToString:@"upload_to_server"]){136 if(!self.filePath){137 [self.view makeToast:@"请先录制音频" duration:2.0 position:@"center"];138 returnNO;139 }140 [NetWorkUtil uploadFile:[NSString stringWithFormat:@"http://%@",[self.currentParams objectAtIndex:0]] localFilePath:self.filePath uploadDelegate:self params:nil code:@"upload_media"];141 }else if([cmd isEqualToString:@"save_login_info"]){142 NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];143 if ([self.currentParams count]>=3) {144 [defaults setObject:[self.currentParams objectAtIndex:0] forKey:@"uid"];145 }else{146 [self.view makeToast:@"请设置正确的参数" duration:2.0 position:@"center"];147 }148 [defaults synchronize];149 //发送推送的userid到服务器150 //[NetWorkUtil uploadFile:[NSString stringWithFormat:@"http://%@",[self.currentParams objectAtIndex:0]] localFilePath:self.filePath uploadDelegate:self params:nil code:@"upload_media"];

151 }else if ([cmd isEqualToString:@"scan_bar"]){152 if(TARGET_IPHONE_SIMULATOR) {153 ZBarReaderViewController *controller=[[ZBarReaderViewController alloc] initWithNibName:nil bundle:nil];154 [self presentModalViewController:controller animated:YES];155 }156 }157 returnNO;158 }159 returnYES;160 }161 -(void) timerFired:(id)sender{162 self.timerStopNum++;163 if(self.timerStopNum==5){164 if (self.recorder&&self.recorder.isRecording){165 [self.recorder stopRecording];166 NSLog(@"时间到,已自动停止录音");167 [self.timerStopRecord invalidate];168 self.timerStopRecord=nil;169 }170 }171 }172 #pragma make QBImagePickerControllerDelegate delegate

173 #pragma make UIImagePickerControllerDelegate

174 //当选择一张图片后进入这里

175 -(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info176 {177 //系统自带的相册单选

178 if ([picker isKindOfClass:[UIImagePickerController class]]) {179 NSString *type =[info objectForKey:UIImagePickerControllerMediaType];180 //当选择的类型是图片

181 if ([type isEqualToString:@"public.image"]){182 //关闭相册界面

183 [picker dismissViewControllerAnimated:YES completion:^{}];184 //先把图片转成NSData

185 UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];186 NSData *data;187 //if (UIImagePNGRepresentation(image) == nil){

188 data = UIImageJPEGRepresentation(image, 0.5);189 //}190 //else{191 //data = UIImagePNGRepresentation(image);192 //}193 //图片保存的路径194 //这里将图片放在沙盒的documents文件夹中

195 NSString * DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];196 //文件管理器

197 NSFileManager *fileManager =[NSFileManager defaultManager];198 //把刚刚图片转换的data对象拷贝至沙盒中 并保存为image.png

199 [fileManager createDirectoryAtPath:DocumentsPath withIntermediateDirectories:YES attributes:nil error:nil];200 NSString *path=[DocumentsPath stringByAppendingString:@"/image.png"];201 [fileManager createFileAtPath:path contents:data attributes:nil];202 //得到选择后沙盒中图片的完整路径203 //NSString *filePath = [[NSString alloc]initWithFormat:@"%@%@",DocumentsPath, @"/image.png"];204

205 //创建一个选择后图片的小图标放在下方206 //类似微薄选择图后的效果

207 UIImageView *smallimage = [[UIImageView alloc] initWithFrame:CGRectMake(50, 120, 40, 40)];208 smallimage.image =image;209

210 //上传图片

211 [NetWorkUtil uploadFile:[NSString stringWithFormat:@"http://%@",[self.currentParams objectAtIndex:0]] localFilePath:path uploadDelegate:self params:nil code:@"upload_photo"];212 //操作完后回调网页js213 //[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"%@('nihao')",[picker.userParam objectAtIndex:1]]];

214 ;215 //加在视图中216 //[self.view addSubview:smallimage];

217 }218 }else{219 //自定义的相册多选

220 NSArray *mediaInfoArray = (NSArray *)info;221 NSLog(@"Selected %d photos and mediaInfoArray==%@", mediaInfoArray.count,mediaInfoArray);222 NSString *resultJson=@"[";223 for (int i=0;i

231 resultJson=[resultJson stringByAppendingString:[NSString stringWithFormat:@"{\"path\":\"%@\"}",fileUrl]];232 [self.selectMultiUploadPhotoUrls addObject:fileUrl];233 if (i

242 }243 - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker244 {245 NSLog(@"您取消了选择图片");246 [picker dismissViewControllerAnimated:YES completion:^{}];247 [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"%@('')",[self.currentParams objectAtIndex:2]]];248 }249 - (void)didReceiveMemoryWarning250 {251 [super didReceiveMemoryWarning];252 //Dispose of any resources that can be recreated.

253 }254 -(void) uploadDelegate:(NSString *)response code:(NSString *)code error:(NSError *)error{255 if ([response rangeOfString:@"http://"].length==7) {256 if ([@"upload_photo"isEqualToString:code]) {257 [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"%@('%@')",[self.currentParams objectAtIndex:1],response]];258 }else if([@"upload_photos_multi"isEqualToString:code]) {259 self.currentUploadPhotoNum++;260 [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"%@('%@',%d,%d)",[self.currentParams objectAtIndex:1],response,self.selectMultiUploadPhotoUrls.count,self.currentUploadPhotoNum]];261 if (self.currentUploadPhotoNum

263 [NetWorkUtil uploadFile:[NSString stringWithFormat:@"http://%@",[self.currentParams objectAtIndex:0]] localFilePath:[self.selectMultiUploadPhotoUrls objectAtIndex:self.currentUploadPhotoNum] uploadDelegate:self params:nil code:@"upload_photos_multi"];264 }265 }else if ([@"upload_media"isEqualToString:code]) {266 [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"%@('%@')",[self.currentParams objectAtIndex:1],response]];267 }268

269 }else{270 [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"%@('%@')",[self.currentParams objectAtIndex:2],response]];271 }272 }273

274 -(void) initRecorder{275 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];276 AmrRecordWriter *amrWriter =[[AmrRecordWriter alloc]init];277 amrWriter.filePath = [path stringByAppendingPathComponent:@"record.amr"];278 amrWriter.maxSecondCount = 60;279 amrWriter.maxFileSize = 1024*256;280 amrWriter.cafFilePath = [path stringByAppendingPathComponent:@"recordAmr.caf"];281 self.amrWriter =amrWriter;282

283

284 MLAudioMeterObserver *meterObserver =[[MLAudioMeterObserver alloc]init];285 meterObserver.actionBlock = ^(NSArray *levelMeterStates,MLAudioMeterObserver *meterObserver){286 NSLog(@"volume:%f",[MLAudioMeterObserver volumeForLevelMeterStates:levelMeterStates]);287 };288 meterObserver.errorBlock = ^(NSError *error,MLAudioMeterObserver *meterObserver){289 [[[UIAlertView alloc]initWithTitle:@"错误" message:error.userInfo[NSLocalizedDescriptionKey] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"知道了", nil]show];290 };291 self.meterObserver =meterObserver;292 MLAudioRecorder *recorder =[[MLAudioRecorder alloc]init];293 __weak __typeof(self)weakSelf =self;294 recorder.receiveStoppedBlock = ^{295 [weakSelf.recordButton setTitle:@"Record"forState:UIControlStateNormal];296 weakSelf.meterObserver.audioQueue =nil;297 };298 recorder.receiveErrorBlock = ^(NSError *error){299 [weakSelf.recordButton setTitle:@"Record"forState:UIControlStateNormal];300 weakSelf.meterObserver.audioQueue =nil;301

302 [[[UIAlertView alloc]initWithTitle:@"错误" message:error.userInfo[NSLocalizedDescriptionKey] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"知道了", nil]show];303 };304 recorder.bufferDurationSeconds = 0.04;305 recorder.fileWriterDelegate =amrWriter;306 self.filePath = amrWriter.cafFilePath; //因为能直接播放是的caf文件,所以给予caf文件地址

307 self.recorder =recorder;308 }309 @end

310

311 @interfaceUIWebView (JavaScriptAlert)312

313 - (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(CGRect *)frame;314

315 @end

316

317 @implementationUIWebView (JavaScriptAlert)318

319 - (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(CGRect *)frame {320

321

322 UIAlertView* customAlert = [[UIAlertView alloc] initWithTitle:@"提示信息" message:message delegate:nil cancelButtonTitle:@"确定"otherButtonTitles:nil];323

324 [customAlert show];325

326 }327 @end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值