好了到这里iPhone6 plus开关来电闪光灯教程就介绍到这里了,希望能帮助到各位。
android手机在获得root权限之后,可以调用命令的方式静默安装软件,这一点体验是很不错,但是目前网络上关于android静默安装app的代码均出自一人之手,其中有一个非常sb的bug,借用代码的人居然都没有发现,导致网络上几乎所有关于android app静默安装的代码都是错误的。
代码如下 | 复制代码 |
new Thread() { |
这个代码实际上也可以运行起来,在root的手机中,也可以静默安装成功,但是代码有问题就是bug,不知道哪一天这个有问题的代码就会出现错误
下面是修改之后的代码,修改了上面的bug
代码如下 | 复制代码 |
new Thread() { |
修改的地方就在于从输出流中读取输出数据,可以看出如果输出的数据大于缓存区大小(256),就会导致安装后的操作多次执行,上面这段错误的代码之所以可以运行,是在于输出流的输出为Success ,小于256,但是如果运行指令出错,返回一大推的错误,那么上面的那一段将读取所有的数据,读逐一进行比较。
下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。
在我安装、配置好PhoneGap项目的所有依赖后,试图执行
$ cordova run android
命令时,出现过如下错误。
Error: /home/sam/front/redwine/platforms/android/cordova/run: Command failed with exit code 8
at ChildProcess.whenDone (/usr/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:743:16)
at Process.ChildProcess._handle.onexit (child_process.js:810:5)
view rawphonegapError hosted with ❤ by GitHub
cordova build android或cordova emulate android的结果也是一样。
但其实真正的问题在上面几行:
[aapt] (skipping file '.jshintrc' due to ANDROID_AAPT_IGNORE pattern '.*')
[aapt] (skipping file '.bower.json' due to ANDROID_AAPT_IGNORE pattern '.*')
[aapt] (skipping file '.directory' due to ANDROID_AAPT_IGNORE pattern '.*')
[aapt] Unable to add '/home/sam/front/redwine/platforms/android/assets/www/bower_components/jquery-mobile/node_modules/grunt-bowercopy/node_modules/bower/node_modules/semver/semver.browser.js.gz': file already in archive (try '-u'?)
[aapt] ERROR: unable to process assets while packaging '/home/sam/front/redwine/platforms/android/ant-build/wine.ap_'
[aapt] ERROR: packaging of '/home/sam/front/redwine/platforms/android/ant-build/wine.ap_' failed
BUILD FAILED
/home/sam/bin/android-sdk-linux/tools/ant/build.xml:932: The following error occurred while executing this line:
/home/sam/bin/android-sdk-linux/tools/ant/build.xml:950: null returned: 1
view rawphonegapError2 hosted with ❤ by GitHub
这是因为项目下有多个node_modules目录,被重复打包而引发的Command failed with exit code 8问题。
解决办法是修改platforms/android/build.xml:
<property name="aapt.ignore.assets" value="<dir>node_*" />
将node_modules目录排除掉,就可以正常执行cordova命令。
下面一起来看一个关于wpf使用WPFMediaKit调用平板(surface2)摄像头拍照,希望例子能给各位同学带来帮助哦。wpf中怎么调用surface(或者其他平板)的摄像头进行拍照那?今天分享一下使用WPFMediaKit调用平板(surface2)摄像头拍照。
下载最新的代码,加入到项目中。
2、test项目引用WPFMediaKit
xaml代码:
代码如下 | 复制代码 |
<Window x:Class="test.WPFMediaKitWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wpfmedia="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit" Title="WPFMediaKitWindow" Loaded="Window_Loaded"WindowState="Maximized"> <Grid> <StackPanel Orientation="Vertical"> <StackPanel Orientation="Horizontal"> <ComboBox Name="cb" SelectionChanged="cb_SelectionChanged" Width="100" /> <Button Content="打开摄像头" x:Name="btnOpen" Click="btnOpen_Click"Width="100"/> <Button Content="拍照" x:Name="btnCapture" Click="btnCapture_Click"Width="100" /> <Button Content="保存" x:Name="btnSave" Click="btnSave_Click" Width="100" /> </StackPanel> <wpfmedia:VideoCaptureElement Name="vce" /> </StackPanel> </Grid> </Window> |
后台代码:
获取摄像头:
代码如下 | 复制代码 |
private void cameraOpen() { cb.ItemsSource = MultimediaUtil.VideoInputNames; if (MultimediaUtil.VideoInputNames.Length > 1) { cb.SelectedIndex = 1; } else { cb.SelectedIndex = 0; } } |
拍照保存到硬盘:win8注意有文件夹的权限问题
代码如下 | 复制代码 |
|
input[type="file"] 可以选择手机里的文件,还可以调用拍照功能(某些浏览器不行),Form 表单如下:
代码如下 | 复制代码 |
<form id="upload-form" action="/upload" enctype="multipart/form-data" method="post"> <input id="selece-files" type="file" name="fileToUpload" /> <input id="do-upload" type="submit" value="上传" /> </form> |
这里做单文件上传,多文件上传可以给 input[type="file"] 加个 multiple 属性便可。当触发 submit 事件提交:
代码如下 | 复制代码 |
upload.submit = function() { // xhr.upload 在 iOS Safari、 大部分 Android 4.0+ 的自带浏览器、Chrome 都支持 xhr.open('post', form.action, false); // 可以在 onProgress 的时候处理进度条 upload.onError = function() {} // 上传完成 return upload; })(window, window.Upload || {}); |
Server 端用了 formidable 这个中间件:npm install formidable。
当然不用 formidable 也能处理文件上传。
代码如下 | 复制代码 |
var fs = require('fs'), app.post('/upload', function(req, res) { // formidable 属性设置可以参考 github 上说明 form.parse(req, function(err, fields, files) { // 我们可以在文件上传完成后移到放置文件的目标目录 |