HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

系统分享显示本App、获取分享的文件、选择文件以其它应用打开列表(ios)

系统分享显示本App、获取分享的文件、选择文件以其它应用打开列表(ios):https://ext.dcloud.net.cn/plugin?id=6901

系统分享显示本App、获取分享的文件、选择文件以其它应用打开列表(ios):https://ext.dcloud.net.cn/plugin?id=6901

热更新 WGT安装包中manifest.json文件的version版本不匹配

热更新

app 热更新后 小米手机清除全部数据,然后重启app ,app 重新执行热更新 这是后就会提示 WGT安装包中manifest.json文件的version版本不匹配,查看plus.runtime.version 果然变成了 基座包版本号,然后就会一直包错 Cannot read property 'screen' of undefined

解决:热更新参数WidgetOptions改为force: true(Boolean 类型 )是否强制安装 就好了。原因暂时未知
true表示强制安装,不进行版本号的校验;false则需要版本号校验,如果将要安装应用的版本号不高于现有应用的版本号则终止安装,并返回安装失败。 仅安装wgt和wgtu时生效,默认值 false。
plus.runtime.install(res.tempFilePath, {
force: true
}

继续阅读 »

app 热更新后 小米手机清除全部数据,然后重启app ,app 重新执行热更新 这是后就会提示 WGT安装包中manifest.json文件的version版本不匹配,查看plus.runtime.version 果然变成了 基座包版本号,然后就会一直包错 Cannot read property 'screen' of undefined

解决:热更新参数WidgetOptions改为force: true(Boolean 类型 )是否强制安装 就好了。原因暂时未知
true表示强制安装,不进行版本号的校验;false则需要版本号校验,如果将要安装应用的版本号不高于现有应用的版本号则终止安装,并返回安装失败。 仅安装wgt和wgtu时生效,默认值 false。
plus.runtime.install(res.tempFilePath, {
force: true
}

收起阅读 »

安卓原生插件Component中申请权限

原生view控件

安卓中如果需要申请权限可以调用ActivityCompat.requestPermissions方法来进行申请,第一个参数需要一个Activity。
在Component中没有直接对Activity的引用,但在initComponentHostView时,有传递Context。
所以可以通过Context来获取Activity
参考链接:https://stackoverflow.com/questions/9891360/getting-activity-from-context-in-android

    fun getActivity(ctx: Context?): Activity? {  
        if (ctx == null) return null  
        ctx.let {  
            return when (ctx) {  
                is Activity -> ctx  
                else -> getActivity((ctx as? ContextWrapper)?.baseContext)  
            }  
        }  
    }
继续阅读 »

安卓中如果需要申请权限可以调用ActivityCompat.requestPermissions方法来进行申请,第一个参数需要一个Activity。
在Component中没有直接对Activity的引用,但在initComponentHostView时,有传递Context。
所以可以通过Context来获取Activity
参考链接:https://stackoverflow.com/questions/9891360/getting-activity-from-context-in-android

    fun getActivity(ctx: Context?): Activity? {  
        if (ctx == null) return null  
        ctx.let {  
            return when (ctx) {  
                is Activity -> ctx  
                else -> getActivity((ctx as? ContextWrapper)?.baseContext)  
            }  
        }  
    }
收起阅读 »

uniapp闭坑指南

uniapp闭坑指南,之前用的react+umi+ant 开发I电脑端,所有遇到问题文档都能找到答案。手机端用了umi各种问题在文档中找不到答案。总结了很多问题,闭坑指南“别听忽悠,看着生态大,实则……”
问题1:打包之后 加载首页没有加载uni官方样式
问题2:scroll-view 不支持相对定位
问题3:不支持打包配置 Hbuilder配置极简
问题4:hbuilder 浏览器运行配置代理不生效
问题5:页面写rpx 不能被编译
问题6:后退监听不支持H5原生返回
问题7:生态强大,插件600+ 实际精华插件寥寥无几
问题8:Hbuilder js里面写变量不能自动提示
问题9:代码格式化不如vscode
问题10:框架文档不详细,提问还需要付费
问题11:提供的附件上传组件,直接上传到云上
问题12:路由不如vue路由好用

继续阅读 »

uniapp闭坑指南,之前用的react+umi+ant 开发I电脑端,所有遇到问题文档都能找到答案。手机端用了umi各种问题在文档中找不到答案。总结了很多问题,闭坑指南“别听忽悠,看着生态大,实则……”
问题1:打包之后 加载首页没有加载uni官方样式
问题2:scroll-view 不支持相对定位
问题3:不支持打包配置 Hbuilder配置极简
问题4:hbuilder 浏览器运行配置代理不生效
问题5:页面写rpx 不能被编译
问题6:后退监听不支持H5原生返回
问题7:生态强大,插件600+ 实际精华插件寥寥无几
问题8:Hbuilder js里面写变量不能自动提示
问题9:代码格式化不如vscode
问题10:框架文档不详细,提问还需要付费
问题11:提供的附件上传组件,直接上传到云上
问题12:路由不如vue路由好用

收起阅读 »

uniapp实现非连接蓝牙的广播功能

广播 蓝牙

目前官方提供的蓝牙是不支持非连接蓝牙的广播功能的,需要用native.js调用原生模块或者使用原生插件来实现

目前官方提供的蓝牙是不支持非连接蓝牙的广播功能的,需要用native.js调用原生模块或者使用原生插件来实现

uniapp 安卓设置虚拟按钮(底部虚拟按钮)(底部导航栏)为透明、半透明、背景色

uniapp 虚拟物理键
 var Color = plus.android.importClass("android.graphics.Color");  
 plus.android.importClass("android.view.Window");    
 var mainActivity = plus.android.runtimeMainActivity();    
 var window_android = mainActivity.getWindow();    
 var WindowManager=plus.android.importClass("android.view.WindowManager");    
 var View=plus.android.importClass("android.view.View");    
     //设置为全透明  
     window_android.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  
     window_android.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);  
window_android.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);   
window_android.setNavigationBarColor(Color.TRANSPARENT);  
    //设置为全透明结束  

    //window_android.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  //设置为半透明   

  // plus.android.invoke(window_android,"setNavigationBarColor",Color.parseColor("#000")); //为虚拟按钮添加背景色
继续阅读 »
 var Color = plus.android.importClass("android.graphics.Color");  
 plus.android.importClass("android.view.Window");    
 var mainActivity = plus.android.runtimeMainActivity();    
 var window_android = mainActivity.getWindow();    
 var WindowManager=plus.android.importClass("android.view.WindowManager");    
 var View=plus.android.importClass("android.view.View");    
     //设置为全透明  
     window_android.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  
     window_android.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);  
window_android.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);   
window_android.setNavigationBarColor(Color.TRANSPARENT);  
    //设置为全透明结束  

    //window_android.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  //设置为半透明   

  // plus.android.invoke(window_android,"setNavigationBarColor",Color.parseColor("#000")); //为虚拟按钮添加背景色
收起阅读 »

uniapp 打开某个应用详情页面,通过应用包名打开。

html5plus 安卓

使用plus引入类,然后使用安卓原生语言调用。需要使用应用包名。
有两种打开方式:
第一种:在应用的内部打开应用详情页(下列代码注释位置)
第二种:调用设置打开应用详情页
根据项目的应用场景来选择:
var Intent = plus.android.importClass("android.content.Intent");
var Settings = plus.android.importClass("android.provider.Settings");
var Uri = plus.android.importClass("android.net.Uri");
var mainActivity = plus.android.runtimeMainActivity();
var intent = new Intent();
var intentGoApp = new Intent(mainActivity.getIntent());
var uri = Uri.fromParts("package", "应用包名", null);

                            //内部打开  
            // intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  
            // intent.setData(uri);  
                            //内部打开结束    

                            //调用设置打开  
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
            intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");  
            intent.setData(Uri.fromParts("package",  "应用包名", null));  
                            //调用设置打开结束                                  

            mainActivity.startActivity(intent);
继续阅读 »

使用plus引入类,然后使用安卓原生语言调用。需要使用应用包名。
有两种打开方式:
第一种:在应用的内部打开应用详情页(下列代码注释位置)
第二种:调用设置打开应用详情页
根据项目的应用场景来选择:
var Intent = plus.android.importClass("android.content.Intent");
var Settings = plus.android.importClass("android.provider.Settings");
var Uri = plus.android.importClass("android.net.Uri");
var mainActivity = plus.android.runtimeMainActivity();
var intent = new Intent();
var intentGoApp = new Intent(mainActivity.getIntent());
var uri = Uri.fromParts("package", "应用包名", null);

                            //内部打开  
            // intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  
            // intent.setData(uri);  
                            //内部打开结束    

                            //调用设置打开  
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
            intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");  
            intent.setData(Uri.fromParts("package",  "应用包名", null));  
                            //调用设置打开结束                                  

            mainActivity.startActivity(intent);
收起阅读 »

uniapp 获取已安装的应用,以及图标转换

html5plus 安卓 base64 bitmap

主要使用Native.js引用安卓的一些类,然后根据安卓原生来获取。

包名、版本、应用名都能正常获取,但是图标获取出来的并不是base64,所以我们要转为base64的路径,这里有一个坑(使用image标签引用转换出来的base64是不行的,要使用img标签), 转换的时间可能较慢,多等待一下。

plus.android.importClass('android.graphics.drawable.BitmapDrawable');
var BitmapFactory = plus.android.importClass("android.graphics.BitmapFactory");
var Base64 = plus.android.importClass("android.util.Base64");
var Bitmap = plus.android.importClass('android.graphics.Bitmap');
var ByteArrayOutputStream = plus.android.importClass("java.io.ByteArrayOutputStream");
var Canvas = plus.android.importClass('android.graphics.Canvas');
plus.android.importClass('java.util.ArrayList');
plus.android.importClass('android.content.pm.PackageInfo');
plus.android.importClass('android.content.pm.PackageManager');
var ApplicationInfo = plus.android.importClass('android.content.pm.ApplicationInfo');
var MainActivity = plus.android.runtimeMainActivity();
var PackageManager = MainActivity.getPackageManager();
if (pinfo != null) {
for (var i = 0; i < pinfo.size(); i++) {
//PackageInfo{4b45699f9d com.tencent.mobileqq}
var pkginfo = pinfo.get(i);
var issysapk = ((pkginfo.plusGetAttribute("applicationInfo").plusGetAttribute("flags") & ApplicationInfo.FLAG_SYSTEM) != 0) ? true : false
if (issysapk == false) {
const apkinfo = {
appName: pkginfo.plusGetAttribute("applicationInfo").loadLabel(PackageManager).toString(),
packageName: pkginfo.plusGetAttribute("packageName"),
versionName: pkginfo.plusGetAttribute("versionName"),
versionCode: pkginfo.plusGetAttribute("versionCode"),
appIco:pkginfo.plusGetAttribute("applicationInfo").loadIcon(PackageManager)
};
var bimp=null;
try{
bimp=apkinfo.appIco.getBitmap();
}catch(e){
bimp = Bitmap.createBitmap(apkinfo.appIco.getIntrinsicWidth(), apkinfo.appIco.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
var canvas = new Canvas(bimp);
apkinfo.appIco.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
apkinfo.appIco.draw(canvas);
}
var baos = new ByteArrayOutputStream();
bimp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
baos.flush();
baos.close();
var bitmapBytes = baos.toByteArray();
var result = "data:image/jpeg;base64,"+Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
apkinfo.appIcon=result;
apkKist.push(apkinfo);
};
};
};

继续阅读 »

主要使用Native.js引用安卓的一些类,然后根据安卓原生来获取。

包名、版本、应用名都能正常获取,但是图标获取出来的并不是base64,所以我们要转为base64的路径,这里有一个坑(使用image标签引用转换出来的base64是不行的,要使用img标签), 转换的时间可能较慢,多等待一下。

plus.android.importClass('android.graphics.drawable.BitmapDrawable');
var BitmapFactory = plus.android.importClass("android.graphics.BitmapFactory");
var Base64 = plus.android.importClass("android.util.Base64");
var Bitmap = plus.android.importClass('android.graphics.Bitmap');
var ByteArrayOutputStream = plus.android.importClass("java.io.ByteArrayOutputStream");
var Canvas = plus.android.importClass('android.graphics.Canvas');
plus.android.importClass('java.util.ArrayList');
plus.android.importClass('android.content.pm.PackageInfo');
plus.android.importClass('android.content.pm.PackageManager');
var ApplicationInfo = plus.android.importClass('android.content.pm.ApplicationInfo');
var MainActivity = plus.android.runtimeMainActivity();
var PackageManager = MainActivity.getPackageManager();
if (pinfo != null) {
for (var i = 0; i < pinfo.size(); i++) {
//PackageInfo{4b45699f9d com.tencent.mobileqq}
var pkginfo = pinfo.get(i);
var issysapk = ((pkginfo.plusGetAttribute("applicationInfo").plusGetAttribute("flags") & ApplicationInfo.FLAG_SYSTEM) != 0) ? true : false
if (issysapk == false) {
const apkinfo = {
appName: pkginfo.plusGetAttribute("applicationInfo").loadLabel(PackageManager).toString(),
packageName: pkginfo.plusGetAttribute("packageName"),
versionName: pkginfo.plusGetAttribute("versionName"),
versionCode: pkginfo.plusGetAttribute("versionCode"),
appIco:pkginfo.plusGetAttribute("applicationInfo").loadIcon(PackageManager)
};
var bimp=null;
try{
bimp=apkinfo.appIco.getBitmap();
}catch(e){
bimp = Bitmap.createBitmap(apkinfo.appIco.getIntrinsicWidth(), apkinfo.appIco.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
var canvas = new Canvas(bimp);
apkinfo.appIco.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
apkinfo.appIco.draw(canvas);
}
var baos = new ByteArrayOutputStream();
bimp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
baos.flush();
baos.close();
var bitmapBytes = baos.toByteArray();
var result = "data:image/jpeg;base64,"+Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
apkinfo.appIcon=result;
apkKist.push(apkinfo);
};
};
};

收起阅读 »

Nvue webview 错误页面自定义

Webview nvue

nvue web-view组件引入网络页面时,如果网络页面发生错误,会出现比较难看的样式
但是官方文档中页面没有web-view错误的回调
但是其实weex中的web组件的回调,在uniapp的web-view也是可以绑定着用的

nvue web-view组件引入网络页面时,如果网络页面发生错误,会出现比较难看的样式
但是官方文档中页面没有web-view错误的回调
但是其实weex中的web组件的回调,在uniapp的web-view也是可以绑定着用的

本地打包 调用plus.runtime.openFile 无任何反应

HTML5+ html5plus

离线打包后 打开文件的功能不正常,也没有任何反应。plus.runtime.openFile 无任何反应。经过调试摸索最后发现
发现是 AndroidManefest.xml的配置问题。android:authorities="改为自己的包名.dc.fileprovider"

<provider  
    android:name="io.dcloud.common.util.DCloud_FileProvider"  
    android:authorities="你的包名.dc.fileprovider"  
    android:exported="false"  
    android:grantUriPermissions="true">  
    <meta-data  
        android:name="android.support.FILE_PROVIDER_PATHS"  
        android:resource="@xml/dcloud_file_provider" />  
</provider>
继续阅读 »

离线打包后 打开文件的功能不正常,也没有任何反应。plus.runtime.openFile 无任何反应。经过调试摸索最后发现
发现是 AndroidManefest.xml的配置问题。android:authorities="改为自己的包名.dc.fileprovider"

<provider  
    android:name="io.dcloud.common.util.DCloud_FileProvider"  
    android:authorities="你的包名.dc.fileprovider"  
    android:exported="false"  
    android:grantUriPermissions="true">  
    <meta-data  
        android:name="android.support.FILE_PROVIDER_PATHS"  
        android:resource="@xml/dcloud_file_provider" />  
</provider>
收起阅读 »

你们开发的ios程序遇到过ipad没事,iphone上经常崩溃吗

iOS

我好像是用redirctto跳转页面的时候,用plus强制旋转,iphone强制旋转就会崩溃但ipad没问题

我好像是用redirctto跳转页面的时候,用plus强制旋转,iphone强制旋转就会崩溃但ipad没问题