国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

安卓手機怎么運行js腳本,手機的javascript怎么開

這篇具有很好參考價值的文章主要介紹了安卓手機怎么運行js腳本,手機的javascript怎么開。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

大家好,小編為大家解答手機怎么啟用javascript功能的問題。很多人還不知道安卓手機怎么運行js腳本,現(xiàn)在讓我們一起來看看吧!

js腳本在手機端運行,人工智能

? ? ? ? 最近在研究c++與JavaScript的交互,有朋友問我安卓怎樣與JavaScript交互,今天找到一個之前寫的小demo,實現(xiàn)的是安卓webview里面的JavaScript和原生安卓進行交互。實現(xiàn)了安卓與JavaScript交互,就可以用html+js+css在webview實現(xiàn)主要界面,Java只負責一些js不好實現(xiàn)的功能比如文件操作,數(shù)據(jù)庫操作,攝像頭操作等硬件操作python for語句用法。

首先要在工程的AndroidManifest.xml文件申請所需權(quán)限,比如攝像頭,gps定位,訪問存儲卡等,代碼大體如下。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jspp.sdxjwkq.js">
    <!--完全的網(wǎng)絡權(quán)限-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- 在SDCard中創(chuàng)建與刪除文件權(quán)限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <!-- 往SDCard寫入數(shù)據(jù)權(quán)限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!--震動權(quán)限-->
    <uses-permission android:name="android.permission.VIBRATE"/>
    <!--攝像頭權(quán)限-->
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-feature android:name="android.hardware.camera" /> <!-- 使用照相機權(quán)限 -->
    <uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 自動聚焦權(quán)限 -->
    <!--閃光燈權(quán)限-->
    <uses-permission android:name="android.permission.FLASHLIGHT"/>
    <!--獲取粗略位置權(quán)限(wifi)-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!--GPS權(quán)限(獲取精確位置)-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!--讀取短信權(quán)限-->
    <uses-permission android:name="android.permission.READ_SMS"/>
    <!--發(fā)短息權(quán)限-->
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <!--錄制音頻權(quán)限-->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <application
        android:name=".BaseApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

然后就是寫一些方法供JavaScript調(diào)用,下面舉幾個例子

package com.jspp.sdxjwkq.js;

import android.app.Service;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.location.Location;
import android.location.LocationManager;
import android.os.Vibrator;
import android.support.v4.content.ContextCompat;
import android.webkit.JavaInterface;
import android.widget.Toast;

import java.util.List;

/**
 * 小工具
 */
public class Utils {
    private Camera camera;//照相機句柄
    /**
     * 震動
     * @param time 震動時長(毫秒)
     * @return
     */
    @JavaInterface
    public boolean vibrate(int time){
        Vibrator vibrator=(Vibrator) BaseApplication.getContext().getSystemService(Service.VIBRATOR_SERVICE);
        vibrator.vibrate(new long[]{0,time},-1);
        return true;
    }

    /**
     * 打開閃光燈
     * @return
     */
    @JavaInterface
    public boolean openFlashlight(){
        try{
            camera= Camera.open();
            if(camera!=null){
                camera.startPreview();
                Camera.Parameters parameters=camera.getParameters();
                parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                camera.setParameters(parameters);
                return true;
            }
            return false;
        }catch (Exception e){
            return false;
        }
    }

    /**
     * 關(guān)閉閃光燈
     * @return
     */
    @JavaInterface
    public boolean closeFlashlight(){
        if(camera!=null){
            camera.getParameters().setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(camera.getParameters());
            camera.stopPreview();
            camera.release();
            camera=null;
            return true;
        }else{
            return false;
        }
    }

    /**
     * 取得設備位置信息
     * @return
     */
    @JavaInterface
    public String getPosition(){
        LocationManager locationManager=(LocationManager) BaseApplication.getContext().getSystemService(Context.LOCATION_SERVICE);
        //獲取可用的位置提供器
        String locationProvider;
        List<String> providers=locationManager.getProviders(true);
        if(providers.contains(locationManager.GPS_PROVIDER)){
            locationProvider=locationManager.GPS_PROVIDER;
        }else if(providers.contains(locationManager.NETWORK_PROVIDER)){
            locationProvider=locationManager.NETWORK_PROVIDER;
        }else{
            return "找不到地理位置獲取設備";
        }
        if (ContextCompat.checkSelfPermission(BaseApplication.getContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                || ContextCompat.checkSelfPermission(BaseApplication.getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED){
            Location location=locationManager.getLastKnownLocation(locationProvider);
            if(location!=null){
                return "{longitude:"+location.getLongitude()+",latitude"+location.getLatitude()+"}";
            }else{
                return "獲取地理位置失敗";
            }
        }else {
            return "沒有權(quán)限獲取該設備地理位置";
        }
    }
    @JavaInterface
    public void toast(String msg){
        Toast.makeText(BaseApplication.getContext(),msg,Toast.LENGTH_LONG).show();
    }
}
package com.jspp.sdxjwkq.js;
import android.webkit.JavaInterface;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.File;

/**
 * 文件操作
 */
public class FileSystem {
    public String DirRoot="/mnt/sdcard";//文件系統(tǒng)的根

    /**
     * 創(chuàng)建文件夾
     * @param url(文件夾路徑)
     * @return
     */
    @JavaInterface
    public boolean createDirByUrl(String url){
        File file=new File(this.DirRoot+url);
        if(!file.exists()){
            file.mkdirs();
            return true;
        }else{
            return false;
        }
    }

    /**
     * 文件是否存在
     * @param url
     * @return
     */
    @JavaInterface
    public boolean fileExists(String url){
        File file=new File(this.DirRoot+url);
        return file.exists();
    }

    /**
     * 返回文件列表
     * @param url
     * @return
     */
    @JavaInterface
    public String getFileListByUrl(String url){
        try{
            JSONArray jsonArray=new JSONArray();
            File file=new File(this.DirRoot+url);
            File[] subFile=file.listFiles();
            for(int i=0;i<subFile.length;i++){
                JSONObject jsonObject=new JSONObject();
                jsonObject.put("name",subFile[i].getName());//文件名
                jsonObject.put("path",subFile[i].getPath());//文件路徑
                if(subFile[i].isDirectory()){//文件類型
                    jsonObject.put("type","dir");
                }else{
                    jsonObject.put("type","file");
                }
                jsonObject.put("size",subFile[i].length());
                jsonArray.put(i,jsonObject);
            }
            return jsonArray.toString();
        }catch (Exception e){return "error";}
    }
}

可以看到每一個類前面都要引入android.webkit.JavaInterface這個包,還有就是方法都要是public的,前面標注上@JavaInterface,聲明為JavaScript接口。

最后就是在相應的webview控件里面暴露這些接口啦,例如下面代碼

package com.jspp.sdxjwkq.js;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;

/**
 * 軟件列表
 */
public class AppFragment extends Fragment {
    private static WebView webView;
    /**
     * 在這里寫頁面邏輯
     * @param savedInstanceState
     */
    @Override
    public void onActivityCreated(Bundle savedInstanceState){
        super.onActivityCreated(savedInstanceState);
        webView=getView().findViewById(R.id.webView1);
        //新窗口使用webview
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view,String url){
                view.loadUrl(url);
                return true;
            }
        });
        webView.getSettings().setJavaScriptEnabled(true);//支持java
        //java接口映射
        webView.addJavaInterface(new Utils(), "Utils");
        webView.addJavaInterface(new Sql(), "Sql");
        webView.loadUrl("file:///mnt/sdcard/jspp/system/appList.html");
    }

    /**
     * 用戶按下返回鍵
     * @param keyCode
     * @param event
     * @return
     */
    public static boolean onKeyDown(int keyCode, KeyEvent event){
        if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
            webView.goBack();
            return false;
        }
        return true;
    }
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    private OnFragmentInteractionListener mListener;

    public AppFragment() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment AppFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static AppFragment newInstance(String param1, String param2) {
        AppFragment fragment = new AppFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_app, container, false);
    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }
    //用于頁面間通信
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
//            throw new RuntimeException(context.toString()
//                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    /**
     * This interface must be implemented by activities that contain this
     * fragment to allow an interaction in this fragment to be communicated
     * to the activity and potentially other fragments contained in that
     * activity.
     * <p>
     * See the Android Training lesson <a href=
     * "http://developer.android.com/training/basics/fragments/communicating.html"
     * >Communicating with Other Fragments</a> for more information.
     */
    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

?//java接口映射
? ? ? ? webView.addJavaInterface(new Utils(), "Utils");
? ? ? ? webView.addJavaInterface(new Sql(), "Sql");
? ? ? ? webView.loadUrl("file:///mnt/sdcard/jspp/system/appList.html");

這幾句就是添加了JavaScript接口映射,直接把實例化對象映射出去,

然后就是在js文件里使用了,比如想要手機振動一秒就可以在js里面直接寫Utils.vibrate(1000);

針對js傳參比較靈活的情況,java實現(xiàn)的時候可以對方法進行重載。

下面就是之前測試的效果

js腳本在手機端運行,人工智能

界面是用的原生的FragmentPager控件,中間白色部分是webview載入的本地網(wǎng)頁。

js腳本在手機端運行,人工智能

可以看到在AndroidManifest.xml文件申請的那些權(quán)限,

js腳本在手機端運行,人工智能

因為應用本身沒有多少圖片等資源,所以打包之后也非常小巧。?文章來源地址http://www.zghlxwxcb.cn/news/detail-818939.html

? ? ? ? 最近在研究c++與JavaScript的交互,有朋友問我安卓怎樣與JavaScript交互,今天找到一個之前寫的小demo,實現(xiàn)的是安卓webview里面的JavaScript和原生安卓進行交互。實現(xiàn)了安卓與JavaScript交互,就可以用html+js+css在webview實現(xiàn)主要界面,Java只負責一些js不好實現(xiàn)的功能比如文件操作,數(shù)據(jù)庫操作,攝像頭操作等硬件操作python for語句用法。

首先要在工程的AndroidManifest.xml文件申請所需權(quán)限,比如攝像頭,gps定位,訪問存儲卡等,代碼大體如下。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jspp.sdxjwkq.js">
    <!--完全的網(wǎng)絡權(quán)限-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- 在SDCard中創(chuàng)建與刪除文件權(quán)限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <!-- 往SDCard寫入數(shù)據(jù)權(quán)限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!--震動權(quán)限-->
    <uses-permission android:name="android.permission.VIBRATE"/>
    <!--攝像頭權(quán)限-->
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-feature android:name="android.hardware.camera" /> <!-- 使用照相機權(quán)限 -->
    <uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 自動聚焦權(quán)限 -->
    <!--閃光燈權(quán)限-->
    <uses-permission android:name="android.permission.FLASHLIGHT"/>
    <!--獲取粗略位置權(quán)限(wifi)-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!--GPS權(quán)限(獲取精確位置)-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!--讀取短信權(quán)限-->
    <uses-permission android:name="android.permission.READ_SMS"/>
    <!--發(fā)短息權(quán)限-->
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <!--錄制音頻權(quán)限-->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <application
        android:name=".BaseApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

然后就是寫一些方法供JavaScript調(diào)用,下面舉幾個例子

package com.jspp.sdxjwkq.js;

import android.app.Service;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.location.Location;
import android.location.LocationManager;
import android.os.Vibrator;
import android.support.v4.content.ContextCompat;
import android.webkit.JavaInterface;
import android.widget.Toast;

import java.util.List;

/**
 * 小工具
 */
public class Utils {
    private Camera camera;//照相機句柄
    /**
     * 震動
     * @param time 震動時長(毫秒)
     * @return
     */
    @JavaInterface
    public boolean vibrate(int time){
        Vibrator vibrator=(Vibrator) BaseApplication.getContext().getSystemService(Service.VIBRATOR_SERVICE);
        vibrator.vibrate(new long[]{0,time},-1);
        return true;
    }

    /**
     * 打開閃光燈
     * @return
     */
    @JavaInterface
    public boolean openFlashlight(){
        try{
            camera= Camera.open();
            if(camera!=null){
                camera.startPreview();
                Camera.Parameters parameters=camera.getParameters();
                parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                camera.setParameters(parameters);
                return true;
            }
            return false;
        }catch (Exception e){
            return false;
        }
    }

    /**
     * 關(guān)閉閃光燈
     * @return
     */
    @JavaInterface
    public boolean closeFlashlight(){
        if(camera!=null){
            camera.getParameters().setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(camera.getParameters());
            camera.stopPreview();
            camera.release();
            camera=null;
            return true;
        }else{
            return false;
        }
    }

    /**
     * 取得設備位置信息
     * @return
     */
    @JavaInterface
    public String getPosition(){
        LocationManager locationManager=(LocationManager) BaseApplication.getContext().getSystemService(Context.LOCATION_SERVICE);
        //獲取可用的位置提供器
        String locationProvider;
        List<String> providers=locationManager.getProviders(true);
        if(providers.contains(locationManager.GPS_PROVIDER)){
            locationProvider=locationManager.GPS_PROVIDER;
        }else if(providers.contains(locationManager.NETWORK_PROVIDER)){
            locationProvider=locationManager.NETWORK_PROVIDER;
        }else{
            return "找不到地理位置獲取設備";
        }
        if (ContextCompat.checkSelfPermission(BaseApplication.getContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                || ContextCompat.checkSelfPermission(BaseApplication.getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED){
            Location location=locationManager.getLastKnownLocation(locationProvider);
            if(location!=null){
                return "{longitude:"+location.getLongitude()+",latitude"+location.getLatitude()+"}";
            }else{
                return "獲取地理位置失敗";
            }
        }else {
            return "沒有權(quán)限獲取該設備地理位置";
        }
    }
    @JavaInterface
    public void toast(String msg){
        Toast.makeText(BaseApplication.getContext(),msg,Toast.LENGTH_LONG).show();
    }
}
package com.jspp.sdxjwkq.js;
import android.webkit.JavaInterface;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.File;

/**
 * 文件操作
 */
public class FileSystem {
    public String DirRoot="/mnt/sdcard";//文件系統(tǒng)的根

    /**
     * 創(chuàng)建文件夾
     * @param url(文件夾路徑)
     * @return
     */
    @JavaInterface
    public boolean createDirByUrl(String url){
        File file=new File(this.DirRoot+url);
        if(!file.exists()){
            file.mkdirs();
            return true;
        }else{
            return false;
        }
    }

    /**
     * 文件是否存在
     * @param url
     * @return
     */
    @JavaInterface
    public boolean fileExists(String url){
        File file=new File(this.DirRoot+url);
        return file.exists();
    }

    /**
     * 返回文件列表
     * @param url
     * @return
     */
    @JavaInterface
    public String getFileListByUrl(String url){
        try{
            JSONArray jsonArray=new JSONArray();
            File file=new File(this.DirRoot+url);
            File[] subFile=file.listFiles();
            for(int i=0;i<subFile.length;i++){
                JSONObject jsonObject=new JSONObject();
                jsonObject.put("name",subFile[i].getName());//文件名
                jsonObject.put("path",subFile[i].getPath());//文件路徑
                if(subFile[i].isDirectory()){//文件類型
                    jsonObject.put("type","dir");
                }else{
                    jsonObject.put("type","file");
                }
                jsonObject.put("size",subFile[i].length());
                jsonArray.put(i,jsonObject);
            }
            return jsonArray.toString();
        }catch (Exception e){return "error";}
    }
}

可以看到每一個類前面都要引入android.webkit.JavaInterface這個包,還有就是方法都要是public的,前面標注上@JavaInterface,聲明為JavaScript接口。

最后就是在相應的webview控件里面暴露這些接口啦,例如下面代碼

package com.jspp.sdxjwkq.js;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;

/**
 * 軟件列表
 */
public class AppFragment extends Fragment {
    private static WebView webView;
    /**
     * 在這里寫頁面邏輯
     * @param savedInstanceState
     */
    @Override
    public void onActivityCreated(Bundle savedInstanceState){
        super.onActivityCreated(savedInstanceState);
        webView=getView().findViewById(R.id.webView1);
        //新窗口使用webview
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view,String url){
                view.loadUrl(url);
                return true;
            }
        });
        webView.getSettings().setJavaScriptEnabled(true);//支持java
        //java接口映射
        webView.addJavaInterface(new Utils(), "Utils");
        webView.addJavaInterface(new Sql(), "Sql");
        webView.loadUrl("file:///mnt/sdcard/jspp/system/appList.html");
    }

    /**
     * 用戶按下返回鍵
     * @param keyCode
     * @param event
     * @return
     */
    public static boolean onKeyDown(int keyCode, KeyEvent event){
        if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
            webView.goBack();
            return false;
        }
        return true;
    }
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    private OnFragmentInteractionListener mListener;

    public AppFragment() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment AppFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static AppFragment newInstance(String param1, String param2) {
        AppFragment fragment = new AppFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_app, container, false);
    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }
    //用于頁面間通信
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
//            throw new RuntimeException(context.toString()
//                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    /**
     * This interface must be implemented by activities that contain this
     * fragment to allow an interaction in this fragment to be communicated
     * to the activity and potentially other fragments contained in that
     * activity.
     * <p>
     * See the Android Training lesson <a href=
     * "http://developer.android.com/training/basics/fragments/communicating.html"
     * >Communicating with Other Fragments</a> for more information.
     */
    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

?//java接口映射
? ? ? ? webView.addJavaInterface(new Utils(), "Utils");
? ? ? ? webView.addJavaInterface(new Sql(), "Sql");
? ? ? ? webView.loadUrl("file:///mnt/sdcard/jspp/system/appList.html");

這幾句就是添加了JavaScript接口映射,直接把實例化對象映射出去,

然后就是在js文件里使用了,比如想要手機振動一秒就可以在js里面直接寫Utils.vibrate(1000);

針對js傳參比較靈活的情況,java實現(xiàn)的時候可以對方法進行重載。

下面就是之前測試的效果

js腳本在手機端運行,人工智能

界面是用的原生的FragmentPager控件,中間白色部分是webview載入的本地網(wǎng)頁。

js腳本在手機端運行,人工智能

可以看到在AndroidManifest.xml文件申請的那些權(quán)限,

js腳本在手機端運行,人工智能

因為應用本身沒有多少圖片等資源,所以打包之后也非常小巧。?

到了這里,關(guān)于安卓手機怎么運行js腳本,手機的javascript怎么開的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • Auto.js安卓腳本自動化app的代碼語句大全

    (一)常用 (二)點擊 (三)按住隨機滑動 (四)控制臺 (五)用線程自動開啟截圖權(quán)限 (六)讀寫權(quán)限 (一)位置 (二)判斷點擊 (二)輸出當前頁面所有文本 1、text函數(shù) 2、bounds函數(shù)

    2024年02月15日
    瀏覽(28)
  • 安卓手機Alpine Term本地運行青龍面板【免root】

    安卓手機Alpine Term本地運行青龍面板【免root】

    目前青龍2.10版本出現(xiàn)白屏問題? ? ? 最簡單的科學上網(wǎng)可以有效解決 我看了網(wǎng)上有作者發(fā)出 Alpine Term 安裝任意版本青龍 學習一下 寫個教程出來 設備:手機? ?電腦(沒有的話比較難用)? 不嫌麻煩可以不用電腦 ? 點擊下載??Alpine-Term? 即可 打開app 等待十幾分鐘 十幾分鐘

    2024年02月09日
    瀏覽(35)
  • win10日程怎么同步到安卓手機?電腦日程同步到手機方法

    win10日程怎么同步到安卓手機?電腦日程同步到手機方法

    在如今快節(jié)奏的生活中,高效地管理時間變得至關(guān)重要。而對于那些經(jīng)常在電腦上安排日程的人來說,將這些重要的事務同步到手機上成為了一個迫切的需求。因為目前國內(nèi)使用win10系統(tǒng)電腦、安卓手機的用戶較多,所以越來越多的職場人士想要知道,win10日程怎么同步到安卓

    2024年02月15日
    瀏覽(20)
  • 基于安卓手機的ORB-SLAM3的調(diào)試運行

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 基于安卓手機的ORB-SLAM3的調(diào)試運行 安卓手機集成了慣性與視覺信息,作為一個輕量化的平臺能夠作為ORB-SLAM3的載體進行運行,作為一個slam的初學者,本文僅作為一個學習過程中遇到的各種問題以及相應

    2024年02月05日
    瀏覽(21)
  • 【免root】舊安卓手機本地運行青龍面板[termux高級終端]

    【免root】舊安卓手機本地運行青龍面板[termux高級終端]

    前期準備 ?下載zerotermux和青龍恢復包并且安裝zwerotermux 軟件需要后臺運行所以我們要打開設置,找到電池,點擊后臺耗電管理找到zerotermux然后允許軟件后臺高耗電(每部手機設置不同自己研究) 1.打開zerotermux輸入termux-setup-storage獲取文件讀寫權(quán)限回車 ? 2.然后把下載好的青

    2024年02月16日
    瀏覽(37)
  • 蘋果手機javascript怎么用

    蘋果手機javascript怎么用

    鐘意阿滿 2023-02-07 14:33 您好,您可以通過以下步驟啟用瀏覽器的JavaScript功能: 在系統(tǒng)桌面上找到設置圖標,點擊進入,如下圖所示。 向下滾動,在菜單欄中找到\\\"Safari\\\"選項,并單擊進入,如下圖所示。 在選項卡中可以選擇開啟關(guān)閉JavaScript選項,如下圖所示。 抱起亞軒找小

    2024年02月12日
    瀏覽(15)
  • 手機上怎么運行java代碼,手機上怎么運行c語言

    手機上怎么運行java代碼,手機上怎么運行c語言

    大家好,小編來為大家解答以下問題,手機上怎么運行電腦軟件,手機上怎么運行python腳本,今天讓我們一起來看看吧! Source code download: 本文相關(guān)源碼 大家好,小編來為大家解答以下問題,手機上的python怎么運行程序,手機的python怎么運行文件,今天讓我們一起來看看吧!

    2024年01月25日
    瀏覽(18)
  • 【前端靈魂腳本語言JavaScript⑤】——JS中數(shù)組的使用

    【前端靈魂腳本語言JavaScript⑤】——JS中數(shù)組的使用

    ?? 作者: 阿偉 ?? 個人主頁: Flyme awei ?? 希望大家多多支持??一起進步呀! ?? 文章對你有幫助??關(guān)注?點贊??收藏?? 第一種: var 數(shù)組名 = new Array(); 創(chuàng)建一個空數(shù)組 第二種: var arr2 = new Array(10); 創(chuàng)建一個定長為10的數(shù)組 第三種 var arr3 = new Array(a,b,c); 創(chuàng)建時直接指定元素值

    2023年04月08日
    瀏覽(111)
  • js 判斷手機、電腦、微信、h5、安卓、IOS、APP

    需求 在我們寫項目時候, 經(jīng)常會遇到限制打開頁面的方式;那就需要我們?nèi)ヅ袛?。網(wǎng)上有很多中方式,我給大家總結(jié)出來了 總結(jié)(解決) 以上是本文所有內(nèi)容,這是集多位大佬文檔整理出來的。有問題有補充可留言

    2024年02月16日
    瀏覽(29)
  • auto.js自動化手機腳本初始配置

    軟件選擇: auto.js 8.0pro版本(對比4.0版本有閹割,微信支付寶不能點)有兩種模式: 客戶端模式 服務器模式 auto.js 4.0版本有一種模式: 客戶端模式 設備和電腦連接: 手機: **服務器模式:**手機和電腦在同一局域網(wǎng)下相互連接。(手機電腦同wifi遠程連接,穩(wěn)定) **客戶端

    2024年02月12日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包