-
2021-01-14 23:26:29
ionic混合开发调用Android系统相册,官方的cordova-image-picker插件在直接用的时候会在Android6.0以上的版本由于没有获得相应的存储权限而闪退。
解决方法一:
在原有的cordova插件上面改动,添加了动态授权,我放在了github 用法和原来的相同。
function getImgPicker() {
var options = {
maximumImagesCount: 1,
width: 800,
height: 800,
quality: 80,
title:'',
message:'',
outputType:1
};
window.imagePicker.getPictures(function (results) {
vm.userInfo.Url = results[0];
console.log(vm.userInfo.Url);
vm.upload(vm.userInfo.Url);
}, function (err) {
publicMethod.showLoadingNoBackdrop('调取相册失败');
console.log(angular.toJson(error, true));
}, options);
}
解决方法二:
var permissions = cordova.plugins.permissions;
permissions.hasPermission(permissions.CAMERA, checkPermissionCallback, null);
function checkPermissionCallback(status) {
if(!status.hasPermission) {
var errorCallback = function() {
console.warn('Camera permission is not turned on');
}
permissions.requestPermission(
permissions.CAMERA,
function(status) {
if(!status.hasPermission) errorCallback();
},
errorCallback);
}
}
ionic 监听Android的返回键和双击退出程序(直接上代码)
$ionicPlatform.registerBackButtonAction(function (e) {
e.preventDefault();
//判断处于哪个页面时双击退出
if ($location.path() == '/tab/home' || $location.path() == '/tab/activity' ||
$location.path() == '/tab/person' || $location.path() == '/tab/share' || $location.path() == '/tab/study') {
if ($rootScope.backButtonPressedOnceToExit) {
ionic.Platform.exitApp();
} else {
$rootScope.backButtonPressedOnceToExit = true;
$cordovaToast.show("再按一次退出系统", "short", "bottom");
$timeout(function () {
$rootScope.backButtonPressedOnceToExit = false;
}, 2000);
}
} else if ($location.path() == '/blueprint-list' || $location.path() == '/megagame-list') {
$state.go('tab.activity'); //此处判断当前所处的View,并返回到tab页
} else if ($ionicHistory.backView()) {
$ionicHistory.goBack();
} else {
if ($rootScope.backButtonPressedOnceToExit) {
ionic.Platform.exitApp();
} else {
$rootScope.backButtonPressedOnceToExit = true;
$cordovaToast.show("再按一次退出系统", "short", "bottom");
$timeout(function () {
$rootScope.backButtonPressedOnceToExit = false;
}, 2000);
}
}
return false;
}, 101);
更多相关内容 -
android相册上传插件
2014-09-23 13:58:21android相册上传插件,可以选择本地图片或者拍照上传。。选定图片后可以截取图片。比较不错的功能插件。 -
Unity访问相册图片插件 UnityNativeGallery
2022-07-08 16:11:41Unity访问相册图片插件 UnityNativeGallery -
GitHub - shajinyang/PhotoPicker: android本地照片选择器,支持拍照,相册选择,单选,多选,压缩,裁剪
2021-05-28 01:32:36Android相册选择,拍照库基本介绍链式调用,本地相册选择,支持多选,单选,压缩,裁剪,批量压缩,裁剪,适配Android6.0,7.0权限还有一些细节后续再完善补充,作者后期打算使用自己的这套库,并持续更新优化。...Android相册选择,拍照库
基本介绍
链式调用,本地相册选择,支持多选,单选,压缩,裁剪,批量压缩,裁剪,适配Android6.0,7.0权限
还有一些细节后续再完善补充,作者后期打算使用自己的这套库,并持续更新优化。
如何使用
Android Studio
第一步:
在项目的gradle里配置
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
第二步:
在module的gradle里配置
dependencies {
compile 'com.github.shajinyang:PhotoPicker:1.1.7'
}
使用示例
快速使用(默认单选,不压缩,不裁剪)
PhotoPicker.Album(mContext)
.setOnResultListener(new OnResultListener() {
@Override
public void onSucess(ArrayList imagePathList) {
//todo 返回图片的绝对路径集合
}
@Override
public void onCancel() {
}
})
.start();
常规使用
PhotoPicker.Album(mContext)
.setMultiChooseSize(6)//设置最大选择数量
.setIsCompress(true)//是否压缩
.setIsCrop(false)//是否裁切
.setOnResultListener(new OnResultListener() {
@Override
public void onSucess(ArrayList imagePathList) {
//todo 返回图片的绝对路径集合
}
@Override
public void onCancel() {
}
})
.start();
自定义UI细节
PhotoPicker.Album(mContext)
.setMultiChooseSize(6)//设置最大选择数量
.setIsCompress(true)//是否压缩
.setIsCrop(false)//是否裁切
.setExitIco(resId)//设置返回图标按钮
.setStateBarColor("#ffffff")//设置状态栏颜色
.setToolBarColor("#ffffff")//设置toolbar颜色
.setOnResultListener(new OnResultListener() {
@Override
public void onSucess(ArrayList imagePathList) {
//todo 返回图片的绝对路径集合
}
@Override
public void onCancel() {
}
})
.start();
-
unity摄像机和相册插件
2017-09-30 16:43:14支持unity5.0以上,支持打开Android和IOS手机系统摄像机和相册软件并截图,解决其他此类工具使用后打包APK出错问题。 -
UnityNativeGallery插件用于unity访问相册等功能
2020-07-08 10:54:18UnityNativeGallery-master.zip 用于unity访问相册等功能 比较方便快捷 -
仿Android系统相册
2016-11-29 14:07:20以GridView的形式展示出指定目录下的图片,点击选择或者是长按图片进入多选状态,在非选择状态下点击图片以图片浏览器打开图片 -
Unity下截屏并直接保存到相册的插件!
2018-02-09 18:14:18直接调用:ScreenshotHelper.iCaptureScreen(CaptureScreenCallBack);即可实现截屏。 函数void CaptureScreenCallBack(Texture2D texture2D) { new FilePathName().SaveTextureAs(texture2D,FilePathName.Save... -
unity 通过安卓制作的插件打开手机相册与选择图片
2020-05-10 10:49:412.下载Android stdio 3.编写插件 4.导入插件 5.unity调用 6.打包运行 1.sdk、jdk 网上教程多的是,这里不再赘述,但是需要注意的是,在安装sdk的时候,你所安装的 SDKPlatform 的API,要和Android SDK Build-tools相...1.配置unity的sdk,jdk
2.下载Android stdio
3.编写插件
4.导入插件
5.unity调用
6.打包运行1.sdk、jdk
网上教程多的是,这里不再赘述,但是需要注意的是,在安装sdk的时候,你所安装的 SDKPlatform 的API,要和Android SDK Build-tools相匹配,不然 会报错。如下
2.Android studio 下载与安装自行搜索百度
3.插件编写
开始最重要的插件的编写,这里我们要做的是jar包
1.在Android stdio 中新建一个空项目,有两个需要注意的地方,如下
包名必须与unity工程中的包名一样,最低使用的API等级也要已知,否则unity打包出来的apk会闪退,当然还有可能有其他的导致闪退的原因,可以自行上网去查。
2.在MainAcitivy中将一下代码复制进去,注意包名要使用你自己的import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity{ private static String LOG_TAG = "LOG_My"; Context mContext = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; } //Unity中会调用这个方法,用于打开本地相册 public void TakePhoto(String str) { Log.d(LOG_TAG,str); Intent intent = new Intent(mContext,WebViewActivity.class); this.startActivity(intent); } }
复制编译之后,会有报错,先不管,如果是第一次使用android stdio的人,可能找不到这个MainAcitivy,在Android stdio的左上角有一个切换视图,切换到 Android视图,一般在java下面
3.导入unity的classes.jar
这个jar包一般在你unity的安装目录下面,需要注意的是,你项目使用的是那个版本,那你就要导入那个版本的classes.jar
路径一般为:unity->Editor->Data->PlaybackEngines->AndroidPlayer->Varations->momo->Release->classes;
找到这个classes.jar之后,将其复制一份,粘贴到刚才的android项目中的app/lib文件夹中,并且讲起添加(右键,add as library,添加之后会弹出提示,确定是app就好了)
原因:android需要和unity进行交互,那么就要调用unity的类才行
4.在MainActivity下面创建新的类,命名为 WebViewActivity
将一下代码复制进去,注意包名要用自己的import android.app.Activity; import android.content.ContentResolver; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.KeyEvent; import com.unity3d.player.UnityPlayer; import java.io.IOException; public class WebViewActivity extends Activity { public static final int NONE = 0; public static final int PHOTORESOULT = 3; public static final String IMAGE_UNSPECIFIED = "image/*"; private String LOG_TAG = "LOG_ZDQ"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED); startActivityForResult(intent, PHOTORESOULT); Log.d(LOG_TAG, "打开相册!"); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(LOG_TAG, "resultCode :" + resultCode); if (resultCode == NONE) return; if (data == null) return; ContentResolver resolver = getContentResolver(); Bitmap bm=null; Uri originalUri = data.getData(); try { bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); } catch (IOException e) { e.printStackTrace(); } String[] proj = {MediaStore.Images.Media.DATA}; Cursor cursor= getContentResolver().query(originalUri,proj,null,null,null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String _path = cursor.getString(column_index); UnityPlayer.UnitySendMessage("Main Camera", "GetPhoto", _path); super.onActivityResult(requestCode, resultCode, data); this.finish(); } }
需要注意的地方有一点:在打成jar包之前,你首先要确定,你这个打开手机相册的方法到底是在那个物体上在这里我给的是Maincamera,然后调用的是getphoto,传过去的参数是你选择的图片的路径
5.打包准备:
新建一个module-》Android Library 里面的设置要和上面的一样
然后将前面写的两个脚本放在新建的module同样的位置,再将classes.jar也复制到module的lib里面 ,add as library,注意包名!
编辑一下 module的 Androidmanifest.xml文件复制一下代码<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.NXNC.Farm" > <!--读取相册权限 (必须)--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application > <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".WebViewActivity"> </activity> </application> </manifest>
注意包名要是自己的
在build.gradle中加上代码,注意不是直接覆盖原本的代码,是追加:
task makejar(type: Copy){ delete 'libs/test.jar' from('build/intermediates/packaged-classes/release/') into('libs') include('classes.jar') rename('classes.jar','FarmGetAndroidPhoto.jar') } makejar.dependsOn(build)
6.打包建议:
在android stdio安装目录下面找到studio.exe.vmoptions ,看看是64位的还是32位的,不管是那个,有那个就编辑那个,修改里面的相应内容,不是全部,不是全部-Xms2048m -Xmx2048m -XX:ReservedCodeCacheSize-2048m
gradle.properties注释到这句话:
就是在前面加一个#7.正式打包!
在terminal中输入gradlew makehar
如果成功,会提示build successful
切换到project视图,在新建的module的libs中会有心的jar在导入插件之前,先用压缩包打开生成的jar,将里面的buildCofig.class删除,原因是unity在使用插件打包的时候,也会生成这个文件,为了避免不必要的错误,直接删掉jar里面的这个;
4.导入插件
在unity工程里面的Asset 中新建文件夹Plugins-Android
Plugins 文件夹是专门用来放unity所使用的插件的,Android这个子文件夹是用来确定放什么引擎写出的插件的5.unity调用
using UnityEngine; using System.IO; using UnityEngine.UI; public class GetAndroidPhoto : MonoBehaviour { public Button button; public RawImage rawImage; void Start () { button.onClick.AddListener(OpenLibery); } private void OpenLibery() { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("TakePhoto", Application.persistentDataPath); } public void GetPhoto(string path) { Debug.Log("android give path ==> " + path); FileGetTex(path); } private void FileGetTex(string path) { FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); fileStream.Seek(0, SeekOrigin.Begin); byte[] bye = new byte[fileStream.Length]; fileStream.Read(bye, 0, bye.Length); fileStream.Close(); Texture2D texture2D = new Texture2D((int)rawImage.rectTransform.rect.width, (int)rawImage.rectTransform.rect.height); texture2D.LoadImage(bye); rawImage.texture = texture2D; } }
6.打包
注意包名与android stdio中的包名的一致性,不要用interal!要用Gradle,原因是因为我们要和Android系统做交互,就要用这个
然后就能正确的运行demo了 -
unity拉取安卓苹果相册的插件
2018-11-03 17:05:43此代码,是unity拉取安卓苹果的插件,里面集成了安卓和ios的所有功能,直接用里面的代码也可以,也可以自己重写方法,按自己的需求来。有不懂的尽管提问 -
uniapp+nvue实现仿微信/得物相册插件:选择界面 +自定义相册+图片视频过滤
2021-10-17 23:20:18本篇文章基于uniapp 框架+ nvue,实现了uniapp仿微信/得物相册选择功能实例项目,该插件实例实现了以下功能: 1: 相册过滤 2: 图视频过滤 3: 界面UI定制化 4: 栅格列数定制化 效果图: 技术实现 开发...本篇文章基于uniapp 框架+ nvue,实现了uniapp仿微信/得物相册选择功能实例项目,该插件实例实现了以下功能:
1: 相册过滤
2: 图视频过滤
3: 界面UI定制化
4: 栅格列数定制化
效果图:
技术实现
- 开发环境:HbuilderX + nodejs
- 技术框架:uniapp + vue2.x
- 测试环境:App端(Android + IOS)
- 插件:Zhimi-Album-JustPicker
- 代码:开源
效果概览
在uniapp开发下,安卓和ios端表现效果高度一致,通过可控性的api配置使得相册实现高度可定制性,可以实现内置图片按钮,列数控制,多语言环境等功能。
自由布局的控件
相对于传统的弹出式选择控件,固定不变的按钮,固定不变的布局与设计使得开发面对多种需求的场景显得尤其乏力,因此自由布局插件给予了一个更大,更自由地开发控件,仅仅引入相册显示本身,其余界面均开发者可定制化开发,开发者拥有了足够的控制权。
<zhimi_album_view ref='albumView' class="album-elem" />
// 获取相册控件对象
let albumView = this.$refs.albumView
// 监听相册事件回调
albumView.setEventCallback(this.AlbumCallbackHanlder)
// 设置相册类型
albumView.albumType(0); // 0 全部, 1 照片, 2 视频
// 获取系统相册列表
albumView.getAlbumTypeNames(albums => this.albums = albums)
// 设置每行显示数量
let spanCount = 4; albumView.setSpanCount(spanCount)
// 设置最大选择数量
var maxCount = 9; albumView.setMaxCount(maxCount)
开发者可以设置列数,最大选择数,甚至是相册类型,指定相册,awesome!
控制筛选,清空选择
相较于与传统的相册选择插件不同,插件提供方法控制过滤相册,清空选择等方法,方便结合各类场景,例如发送图视频、朋友圈上传图片、图文排版场景。
获取系统相册列表
albumView.getAlbumTypeNames(albums => this.albums = albums)
加载相册内容
albumView.loadAlbum(albumId) // 通过上述的获取相册列表获得
清空已选项目
albumView.clearCheckedImages()
获取已选项目
albumView.clearCheckedImages()
灵活的客制化UI
由于相册控件的组件化,使得界面的布局更加灵活,不论是配色,语言,界面布局都能自由搭配,仿微信相册,仿得物界面,均能掌握在手中。
至此uniapp开发仿微信仿微信/得物相册选择界面的分享到此为止咯
对于这部分的代码使用到的原生插件,可以参考uniapp插件市场中的插件,在插件市场也有开源的代码工程哦。
DCloud 插件市场自定义相册地址:智密相册-自定义原生相册+图片视频过滤-QQ群755910061-智密科技 - DCloud 插件市场
通过插件市场对应的按钮可以直接导入开源代码,但是记得先安装HbuilderX哦
欢迎加入插件使用交流QQ群:755910061 一起讨论uniapp开发
-
Android 炫酷相册源码.zip
2022-06-16 15:26:36Android 炫酷相册源码.zip -
Unity 录屏截屏到Android相册,支持鸿蒙
2022-05-20 11:23:17Unity截屏保存到Android相册Unity端截屏代码Unity需要的Android Jar及Java代码(由于之前是找的一个Jar库因不支持鸿蒙所以自己动手二次开发的Java调用库)Unity JAR库(支持Android系统)Unity录屏代码 Unity端截屏... -
Android 水果相册浏览器源码.zip
2022-06-16 14:47:54Android 水果相册浏览器源码.zip -
Android工程中调用Cordova插件(相册)源码详情解析
2020-01-11 16:33:10我们先通过loadUrl(url)加载我们的本地h5项目,使用loadUrl这个方法一定是继承自CordovaActivity,cordovaActivity的onCreate...h5中如何调用引入的cordova插件呢,以相册选取为例,下面我们来看下: navigator.ca... -
cordova-cameraplus:Cordova插件(iOS + Android)从Base64中的Camera检索实时图像
2021-05-21 18:52:47安卓 CameraPlus具有以下功能 在后台从Camera检索实时图像 在Base64中以HTML / JS检索图像,以便可以显示它们,将其保存在本地存储中并使用HTTP POST发送 设置目标格式(仅适用于iOS) 如果5秒钟内未请求,则自动... -
Unity调用安卓、IOS 相机、相册、保存图片的插件
2020-03-12 17:05:31经过诸多摸索与Android端、IOS端的相机相册插件寻找与改写 先是在github中找到了一个UnityNativeCamera的项目,经过测试可以在安卓与IOS双端完美运行,只是缺少相册功能。 后来经过修改项目安卓代码与ios代码,... -
cordova-plugin-album:Cordova的本机相册插件
2021-04-27 18:58:32cordova-plugin-useragent =科尔多瓦-插件-相册com.danielsogl.cordova.useragent = com.elbozor.cordova.album im.ltdev.cordova.UserAgent = com.elbozor.cordova.PhotoAlbum UserAgent =相册im / ltdev / cordova... -
基于Android的手机相册分享软件的设计与实现
2020-10-17 08:03:49分析了基于Android的手机相册分享软件的功能模块,对其进行架构设计和代码实现,完成了照片拍摄,特效编辑等功能,并以广泛使用的新浪微博为例,探讨了如何通过微博授权进行分享。 -
cordova-android保存图片插件
2018-12-20 11:19:38cordova-android保存图片插件,不知道为何不适用ios,仅供参考 -
Flutter 使用插件打开相册、相机
2021-06-23 10:33:061:引入插件 pubspec.yaml 增加 image_picker: ^0.7.5+2 2:android 添加androidx兼容 gradle.properties 增加 android.useAndroidX=true android.enableJetifier=true build 添加依赖 ... -
相册展示PhotoSwipe.js插件实现
2020-11-25 17:07:14这个组件主要是用来展示图片、相册用的,还是很实用的。 一、使用这个组件需要引入两个js文件 1 [removed] 2 [removed] <!–当前最新版的应该是1.0.11 –> 二、然后页面结构可以是这样子的 -
jQuery手风琴相册集播放插件
2013-07-10 17:38:55这是一款基于jQuery的手风琴相册集播放插件,相册分四组,每一组均可展开播放相片。 建议开发童鞋使用统一开发环境UDE来进行查看、调试、开发哦~~其属于MM应用引擎的应用开发部署工具,它是基于云计算基础架构,... -
Unity调用Android/IOS系统相册、摄像机,选取后可以裁剪(Demo)
2017-11-23 18:49:39最新版,Unity调用Android/IOS系统相册、摄像机,选取后可以裁剪(Demo) -
Unity调用获取手机图片和下载图片功能 NativeGallery插件 跨平台
2021-10-25 14:39:41插件导入unity,直接调用,获取手机图片和下载图片功能 NativeGallery插件 跨平台 亲测可用 -
uniapp框架如何实现仿微信相册插件 | 图视频编辑 + 压缩
2021-11-28 14:39:33在上上篇文章中(),我们基于... 测试环境:App端(Android + IOS)、 代码:开源 效果预览 业务分析 这里主要是承接上次写的仿微信相册(uniapp框架如何实现仿微信相册 | 图视频过滤、相册选择... -
MediaFilesManager:简单的跨平台插件,可在Android和iOS上访问图像和视频
2021-02-06 02:52:10简单的跨平台插件,可在Android和iOS上访问图像和视频。 平台支援 平台 版 Xamarin.iOS iOS 8以上 Xamarin.Android API 14+ 正在安装 安装 : nuget install MediaFilesManager API用法 呼叫... -
Android 调用系统相册和系统照相机功能雨实例源码.zip
2022-06-16 15:14:14Android 调用系统相册和系统照相机功能雨实例源码.zip -
Unity插件NativeGallery拉取手机相册的使用简记
2021-06-23 15:16:27Unity插件NativeGallery拉取手机相册的使用简记拉取手机相册文档摘要1. 关于2. 使用设置3.常见问题解答项目示例资源链接 拉取手机相册 项目中使用到了拉取手机相册的功能,使用的该插件。插件中有README.txt英文文档... -
Android GitHud 项目插件
2021-06-05 08:51:501、android自定义相册,实现了拍照、图片选择(单选/多选)、 裁剪(单/多裁剪)、旋转、ImageLoader无绑定任由开发者选择、功能可配置、主题样式可配置。GalleryFinal为你定制相册。通过Gradle抓取:compile'...