精华内容
下载资源
问答
  • Android:JS调用安卓方法介绍

    千次阅读 2016-09-19 17:59:11
    Android:JS调用安卓方法介绍标签(空格分隔): android jsAndroidJS调用安卓方法介绍 1创建提供给JS调用的方法 2在JS中调用方法 3将对象传递个JS代码 Demo 1,创建提供给JS调用的方法 @android.webkit....

    Android:JS调用安卓方法介绍

    标签(空格分隔): android js


    1,创建提供给JS调用的方法

        @android.webkit.JavascriptInterface
        fun showToast(name: String) {
            Toast.makeText(this, name, Toast.LENGTH_SHORT).show()
        }

    给方法声明@android.webkit.JavascriptInterface后表明该方法允许JS代码调用

    2,在JS中调用方法

        <!DOCTYPE html>
        <html>
            <head>
                <meta http-equiv="Content_Type" content="text/html;charset=utf-8"/>
                <title>Js调用Android</title>
            </head>
            <body>
                <input type="button" value="打招呼" onclick="myObj.showToast('孙悟空');"/>
            </body>
        </html>

    这里调用了上面提供的showToast方法

    3,将对象传递个JS代码

            val settings = mmWebView.settings
            settings.javaScriptEnabled = true
            mmWebView.addJavascriptInterface(object, "myObj")

    第一句取出WebView的设置对象,第二句允许执行JS代码,第三句发送方法所在的对象,并将方法命名为myObj

    Demo

    class MiniBrowserActivity : AppCompatActivity() {
        val js = """
        <!DOCTYPE html>
        <html>
            <head>
                <meta http-equiv="Content_Type" content="text/html;charset=utf-8"/>
                <title>Js调用Android</title>
            </head>
            <body>
                <input type="button" value="打招呼" onclick="myObj.showToast('孙悟空');"/>
            </body>
        </html>
        """
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_mini_browser)
    
            val settings = mmWebView.settings
            settings.javaScriptEnabled = true
            mmWebView.addJavascriptInterface(this, "myObj")
            mmWebView.loadData(js, "text/html;charset=utf-8", "utf-8")
        }
    
        @android.webkit.JavascriptInterface
        fun showToast(name: String) {
            Toast.makeText(this, name, Toast.LENGTH_SHORT).show()
        }
    }

    最终效果截图

    展开全文
  • JavaScript调用Android方法,向Android方法传递json数据。
  • 这两天在做划词搜索时,需要让前端的js调用后端的Android方法,但总是调不成,经过搜索,问题解决,现记录成文。   解决方案 1、确定调用了webView.addJavascriptInterface()方法并且webView支持js webView支持...

    背景

    这两天在做划词搜索时,需要让前端的js调用后端的Android方法,但总是调不成,经过搜索,问题解决,现记录成文。

     

    解决方案

    1、确定调用了webView.addJavascriptInterface()方法并且webView支持js

    webView支持js是前提,设置方法:webView.getSettings().setJavascriptEnabled(true)

    webView.addJavascriptInterface(object, string)方法用来给webview的网页绑定安卓端的对象。object就是安卓端的对象,string是这个对象在前端的名字

     

    2、确定要调用的方法加了@JavascriptInterface注解,而且访问修饰符是public

    如果js要调安卓端的某个方法,必须在安卓端的这个方法前加上@JavascriptInterface注解,而且,如果targetSdkVersion >= 17的话,还要加上@SuppressLint("JavascriptInterface")注解,而且要保证这些方法是公有的

     

    3、考虑代码混淆

    如果项目用了代码混淆,则要在项目的proguard-project.txt文件里声明下面几句话,保证混淆时@JavascriptInterface注解不被去掉

    -keepattributes *JavascriptInterface*
    
    -keep class com.example.szc.TextSelectionHelper
    -keep class com.example.szc.TextSelectionHelper {public *;}

    第一行表示保留JavascriptInterface注解

    第二行是保持TextSelectionHelper类,因为我是在这个类里使用JavascriptInterface注解的

    第三行表示保持这个类里所有公有字段,因为使用JavascriptInterface注解的方法只有是公有的,才有效

     

    结语

    解决思路就如上所示,我是通过第三步解决的,坑了一天才完事。

    展开全文
  • unity想要实现安装apk文件需要与安卓实现通讯所有需要自己来实现安卓代码。

    unity想要实现安装apk文件需要与安卓通讯,所以需要自己来实现安卓代码。

    第一步先要新建一个安卓项目提供给unity来使用,我这里使用的工具是android studio4.1,然后再新建一个module选择Android Library如图所示。

     在此module下新建一个文件夹名字为tempLibs 在unity安装路径下面找到Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar文件导入到该目录下然后在build.gradle文件中的dependencies添加如下代码compileOnly files('tempLibs/classes.jar'),最终如图所示

    修改AndroidManifest.xml为以下

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.mylibrary">
        <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
        <application>
            <meta-data
                android:name="com.google.android.actions"
                android:resource="@xml/provider_paths" />
            <!-- 适配android 7.0以及以上更新APK路径 -->
            <provider
                android:name="androidx.core.content.FileProvider"
                android:authorities="${applicationId}.fileprovider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/provider_paths" />
            </provider>
        </application>
    </manifest>

    在res/xml中新建一个provider_paths.xml文件写法如下 <?xml version="1.0" encoding="utf-8"?><paths><external-path name="publicDir" path="."/></paths>如图所示:

    新建一个java类Install提供给unity使用,代码如下:

    package com.example.mylibrary;
    import android.app.Activity;
    import android.content.*;
    import android.net.Uri;
    import android.os.*;
    import android.util.Log;
    import androidx.core.content.*;
    import com.unity3d.player.UnityPlayer;
    import java.io.File;
    public class Install {
        public static boolean 安装apk(String apkPath){
            File apkFile = new File(apkPath);
            if (apkFile.exists()) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    Uri contentUri = FileProvider.getUriForFile(UnityPlayer.currentActivity, UnityPlayer.currentActivity.getPackageName()+".fileprovider", apkFile);
                    intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
                } else {
                    intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                }
                UnityPlayer.currentActivity.startActivity(intent);
                return true;
            } else {
                Log.d("TAG", "文件不存在"+apkPath);
                return false;
            }
        }
    }
    

    最后点击菜单buid-Make Project将会生成arr文件。如图所示:

    找到该arr文件导入到unity使用。接下来才是重头戏。我这里使用的unity开发版本为unity2020.2。因为unity导出的项目不支持androidx,所以需要unity支持androidx。

    选择unity菜单文件-生成设置-玩家设置-player,在发布设置中勾选:自定义主要gradle模板,自定义gradle属性模板如图所示:

    unity将会在asset\Plugins\Android生成两个文件gradleTemplate.properties和mainTemplate.gradle,需要分别修改这两个文件。先用记事本打开gradleTemplate.properties文件在最后一行加上以下代码:android.overridePathCheck=true

    android.useAndroidX=true
    android.enableJetifier=true

    如图所示:

    然后再修改mainTemplate.gradle文件,在dependencies 块中添加一行代码: implementation 'androidx.appcompat:appcompat:1.2.0'如图所示:

    这样基本就算大功告成就算调用了。首先随便找一个apk安装包放在StreamingAssets先命名成a.apk。由于unity不能直接读取StreamingAssets下面的文件所以最好在项目启动时拷贝到可读写路径persistentDataPath下。代码如下:

    void Start () {
            StartCoroutine(把安装包写入可读写路径());
        }
    
        IEnumerator 把安装包写入可读写路径()
        {
            if (!File.Exists(Application.persistentDataPath + "/a.apk"))
            {
                UnityWebRequest request = UnityWebRequest.Get(Application.streamingAssetsPath + "/a.apk");
                yield return request.SendWebRequest();
                File.WriteAllBytes(Application.persistentDataPath + "/a.apk", request.downloadHandler.data);
            }
            else
            {
                print("已经存在,");
            }
        }

    最终调用的方式安装apk的方法如下:

       public static bool 安装APK(string apkPath)
        {
            AndroidJavaClass javaClass = new AndroidJavaClass("com.example.mylibrary.Install");
            return javaClass.CallStatic<bool>("安装apk", apkPath);
        }

    附项目下载地址(包括安卓与unity项目):https://download.csdn.net/download/chunyu90225/13779396

    展开全文
  • 前端JS调用安卓方法

    2019-11-14 12:23:11
    window.client // 是个对象,是安卓注入到JS中的,安卓中所有向JS暴露的方法都在里面 let android = window.client; // 将注入对象赋给变量 android.test(param1, param2) // 调用的函数,且传参给安卓。参数的...
    
    window.client  // 是个对象,是安卓注入到JS中的,安卓中所有向JS暴露的方法都在里面
     let android =  window.client; // 将注入对象赋给变量
    
     android.test(param1, param2) // 调用的函数,且传参给安卓。参数的数据类型必须和安卓定义的一致
     let returnValue = android.test(param1, param2) // 接收安卓的返回值,如果是要封装,记得加return,不然一直都是undefined
    
    展开全文
  • 最近公司弄点这样的需求,我借此机会学习重新温故了一下,Js掉用android原生的方法 还有把值传回给js的方法
  • js调用ios和android方法使用总结

    千次阅读 2018-11-14 17:35:17
    1、js调动原生登录方法 使用场景,点击一个按钮,如果没有登录,则... //js调用原生登录方法 $('.test').click(function(){ if(window.jsObj){//判断是否安卓app window.jsObj.appLogin(); }else{//ios App ...
  • 安卓方法——equals()

    千次阅读 2016-12-14 10:42:09
    equals()用于判断字符串的内容是否相同。相同返回true,反之false。
  • )这个带两个参数的方法:第一个参数是包含你要加载的你的工程目录中的drawable文件夹下的图片资源文件的对象(一般写成 getResources()就ok了);第二个时你需要加载的位图资源的Id。BitmapFactory....
  • 看来很多网上的关于Unity和安卓交互的博客,发现很多都是用Eclipse的的jar包 ,不幸的是我的电脑的Eclipse挂了,也好,正好学习下安卓官方的开发工具Android Studio,不瞎比比,开始! 首先看下效果图 (只实现界面...
  • Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Android 安卓DataBinding(四)·单向绑定 ObservableField Android 安卓...
  • 需要实现的功能: 点击uniapp页面view,传递参数,调用android原生代码,然后原生代码处理数据,返回到uniapp页面 ...点击调用android原生方法</view> </view> </template> &
  • 方法当然是有的,下面小编就来教大家两个解决安卓(Android)x86屏幕旋转问题的方法,实现所有应用强制竖屏。 方法一:锁定屏幕方向(推荐) 在主界面顶部右侧往下拉,点击“自动旋转”图标开启屏幕方向锁定。 ...
  • 今天国庆节,在这举国欢庆的日子里,发一篇博文留念一下这个特殊的...Android的App版本号相关内容比iOS的App版本号内容要多,而且iOS版的App版本信息跟Android的还不一样。本篇文章就来介绍一下Android开发中获取A...
  • 安卓android设备添加rndis主从机以及互联测试方法一、首先需要编译内核,解压源码文件到home目录,注意root权限解码命令tar –xzvfkernel_v04_release-20141115.tgz如下图,由cd命令打开内核目录:cd kernel_v04_...
  • 方法一: WindowManager wm = (WindowManager) this .getSystemService(Context.WINDOW_SERVICE); int width = wm.getDefaultDisplay().getWidth(); int height = wm.getDefaultDisplay().getHeight(); 方法二: ...
  • ubuntu或者别的linux系统安装安卓模拟器(Android SDK)的方法跟Windows差不多,今天安卓部落就教大家怎么样在ubuntu环境下安装安卓模拟器。  首先下载Android SDK  Android SDK官方下载地址:...
  • 安卓android的sdk安装路径和方法

    千次阅读 2017-09-21 15:48:28
    http://www.androiddevtools.cn/http://blog.csdn.net/dr_neo/article/details/49870587http://tools.android-studio.org/index.php/sdk/下载可以安装的文件installer_r24.4.1-windows.exe安装JDK1.8SDK7.1和SDK5.11...
  • [Android]【安卓】自定义控件onDraw前调用的方法 本篇博客已收录到我的安卓开发小结中——点击【安卓开发小结】 这个方法的调用是在onDraw方法之前。 view.getViewTreeObserver().addOnGlobalLayoutListener...
  • uniapp安卓原生插件的开发方法

    千次阅读 热门讨论 2020-05-15 18:23:34
    刚开始接手uniapp项目的时候遇到一些uniapp无法实现的功能,需要调用原生安卓方法,官方文档看的我一头雾水。 查阅大量文章后总结出一套切实可行的方案,在相同环境配置下一定可用。 一、前期准备工作 ​​​​​...
  • [Android]【安卓】TypedArray的getDimension()方法 本篇博客已收录到我的安卓开发小结中——点击【安卓开发小结】  参考资料:http://blog.csdn.net/joe_storm/article/details/38978595 当你自定义view里的...
  • H5 调用安卓IOS方法

    千次阅读 2019-06-18 14:22:34
    1.原生开发中嵌入H5页面。H5调用原生的方法 //IOS //feedbackFinish 是IOS暴露出来的方法名,参数没有则null,不能为空 ...2.H5调用Android方法 2.1需要安卓与H5定义一个协议,简单来说就是一个入口方法 webVie...
  • android安卓手机分屏多窗口实现方法

    万次阅读 2016-04-05 10:48:06
    效果图 然后就是下载安装万能的xpoesd框架了 说一句需要root 安装后打开选择管理框架模块 点击安装,更新 ...重启后打开悬浮窗口,选择测试,如果是这样就OK了
  • Android安卓系统提示应用程序未安装的三种解决方法  有时候,在给自己的安卓爱机安装软件或者打开某个软件的时候,手机会提示应用程序未安装,一般来说出现这种提示,有以下三个原因。  一,很多人在Android...
  • 1.解决办法,在build.gradle里面添加如下设置 dexOptions { incremental true javaMaxHeapSize "4g" } 出现这个问题原因: 根据异常说明OOM:java heap space可知,就是打包时 java的堆溢出了;...
  • 最近项目中有一个安卓与JS交互的功能,安卓调用Js方法,总是不走,我的最初方法是: 这样一直不走JS方法,找了好久,都一头雾水,心态快炸了,就去厕所冷静了十分钟,心静下来,想了想我调的是一个方法,如果是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,349,910
精华内容 539,964
关键字:

安卓方法