当前位置:首页 » 安卓系统 » android调用java

android调用java

发布时间: 2022-08-06 07:36:15

A. 怎样在android中使用java的方法

将代码放在一个类中,用安卓集成开发工具环境软件,安卓版的。,打包之后安装,打开后调用截屏功能。

B. Android 中如何在java类中调用activity 中的一个方法

通常,您不应该以这种方式创建新的 MainActivity 实例。要打开一个新的 MainActivity,请使用 Intent。在您的情况下,您应该引用原始 MainActivity 实例,并在那里调用此方法。不要以任何方式创建新的,因为您已经在运行它。
一个简单的解决方法:
MainActivity.this.myMethod("Hello there")
您不必存储mContext. 你已经在 MainActivity 里面了。
因此,完整的代码将是:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = findViewById(R.id.webview);
myWebView.loadUrl("http://www.google.com");
myWebView.addJavascriptInterface(new WebAppInterface(), "Android");
}
public void myMethod(String test){
Toast.makeText(this, test, Toast.LENGTH_SHORT).show();
}
public class WebAppInterface {
/** Show a toast from the web page */

@JavascriptInterface
public void showToast(String toast) {
MainActivity.this.myMethod("Hello there");
}
}
}
实际上,我认为您甚至可以避免使用MainActivity.this., 并myMethod直接调用。

C. android应用程序怎么调用外部java文件和XML文件

没明白你的意思,android生成新的layout的时候在它的R这个类里会自动在layout方法里添加这个XML文件的关连,同时XML里的控件也会添加到ID这个方法里,你只需要在新的activity子类里调用this.setContentView(R.layout.xml名)就能将这个子类与新的XML关联上,同时在你的主界面上调用
控件类型
引用名 =
(控件)
findViewById(R.id.XML中的控件名);就可以得到这个控件了

D. 如何在android平台上使用js直接调用Java方法

js中需要通过Android的WebView控件来实现js与java相互调用 。

WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法:
1.在要Activity中实例化WebView组件:WebView webView = new WebView(this);
2.调用WebView的loadUrl()方法,设置WevView要显示的网页:
互联网用:webView.loadUrl("http://xxx.xxx.xxx");
本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
3.调用Activity的setContentView( )方法来显示网页视图
4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
5.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET" />

E. 如何在Android平台上使用JS直接调用Java方法

在Cocos2d-js 3.0beta中加入了一个新特性,在Android平台上我们可以通过反射直接在js中调用Java的静态方法。使用方法很简单:

那么这个Test类的完整类名应该是org/cocos2dx/javascript/Test,注意这里必须是斜线/,而不是在Java代码中习惯的点。

(2)方法名

方法名很简单,就是方法本来的名字,例如sum方法的名字就是sum。

(3)方法签名

方法签名稍微有一点复杂,最简单的方法签名是()V,表示一个没有参数没有返回值的方法。其他一些例子:

(I)V表示参数为一个int,没有返回值的方法;

(I)I表示参数为一个int,返回值为int的方法;

(IF)Z表示参数为一个int和一个float,返回值为boolean的方法;

现在有一些理解了吧,括号内的符号表示参数类型,括号后面的符号表示返回值类型。因为Java是允许函数重载的,可以有多个方法名相同但是参数返回值不同的方法,方法签名正是用来帮助区分这些相同名字的方法的。

(4)参数

参数可以是0个或任意多个,直接使用js中的number,bool和string就可以。

(5)使用示例

将会调用上面的Test类中的静态方法:

//调用hello方法

jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test","hello","(Ljava/lang/String)V","thisisamessagefromjs");

//调用第一个sum方法

varresult=jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test","sum","(II)I",3,7);

cc.log(result);//10

//调用第二个sum方法

varresult=jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test","sum","(I)I",3);

cc.log(result);//5

(6)注意

另外有一点需要注意的就是,在android应用中,cocos的渲染和js的逻辑是在gl线程中进行的,而android本身的UI更新是在app的ui线程进行的,所以如果在js中调用的Java方法有任何刷新UI的操作,都需要在ui线程进行。

例如,在下面的例子中会调用一个Java方法,弹出一个android的Alert对话框。

//给我们熟悉的AppActivity类稍微加点东西

{

privatestaticAppActivityapp=null;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

app=this;

}

(finalStringtitle,finalStringmessage){

//这里一定要使用runOnUiThread

app.runOnUiThread(newRunnable(){

@Override

publicvoidrun(){

AlertDialogalertDialog=newAlertDialog.Builder(app).create();

alertDialog.setTitle(title);

alertDialog.setMessage(message);

alertDialog.setIcon(R.drawable.icon);

alertDialog.show();

}

});

}

}


在js中调用

jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity","showAlertDialog","(Ljava/lang/String;Ljava/lang/String;)V","title","hahahahha");

这样调用就可以看到一个android原生的Alert对话框了。

F. android ndk 开发,C++ 调用Java的方法

  1. Android.mk文件:



LOCAL_SRC_FILES参数用空格隔开

[c-sharp]view plainprint?

LOCAL_PATH:=$(callmy-dir)

include$(CLEAR_VARS)

LOCAL_MODULE:=native

LOCAL_SRC_FILES:=geolo.cppmy_jni.h

include$(BUILD_SHARED_LIBRARY)


2. geolo.cpp

先用FindClass方法找到java类,有点类似java的反射用LoadClass

再用CallObjectMethod方法调用Java类的函数。


[c-sharp]view plainprint?

#include"my_jni.h"

jobjectgetInstance(JNIEnv*env,jclassobj_class){

jmethodIDconstruction_id=env->GetMethodID(obj_class,"<init>","()V");

jobjectobj=env->NewObject(obj_class,construction_id);

returnobj;

}

JNIEXPORTjstringJNICALLJava_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv*env,jobjectthiz){

jstringstr;

jclassjava_class=env->FindClass("com/easepal/geolo/CForCall");

if(java_class==0){

returnenv->NewStringUTF("notfindclass!");

}

jobjectjava_obj=getInstance(env,java_class);

if(java_obj==0){

returnenv->NewStringUTF("notfindjavaOBJ!");

}

jmethodIDjava_method=env->GetMethodID(java_class,"GetJavaString","()Ljava/lang/String;");

if(java_method==0){

returnenv->NewStringUTF("notfindjavamethod!");

}

str=(jstring)env->CallObjectMethod(java_obj,java_method);

returnstr;

}

3. my_jni.h


[c-sharp]view plainprint?

/*DONOTEDITTHISFILE-itismachinegenerated*/

#include<jni.h>

/*Headerforclasscom_easepal_geolo_CActivityMain*/

#ifndef_Included_com_easepal_geolo_CActivityMain

#define_Included_com_easepal_geolo_CActivityMain

#ifdef__cplusplus

extern"C"{

#endif

/*

*Class:com_easepal_geolo_CActivityMain

*Method:stringFromJNI

*Signature:()Ljava/lang/String;

*/

JNIEXPORTjstringJNICALLJava_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv*,jobject);

#ifdef__cplusplus

}

#endif

#endif


4.CActivityMain.java


[c-sharp]view plainprint?

packagecom.easepal.geolo;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.widget.TextView;

{

/**.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

TextViewtv=newTextView(this);

tv.setText(stringFromJNI("hello"));

setContentView(tv);

}

static{

System.loadLibrary("native");

}

(Stringstr);

}


5.CForCall.java


[c-sharp]view plainprint?

packagecom.easepal.geolo;

publicclassCForCall{

publicCForCall(){};

//public~CForCall(){};

publicStringGetJavaString(){

Stringstr;

str="123456";

returnstr;

}

}

G. android ndk怎么访问java中方法

Android.mk文件:

LOCAL_SRC_FILES参数用空格隔开
[c-sharp] view plainprint?
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=native
LOCAL_SRC_FILES:=geolo.cpp my_jni.h
include $(BUILD_SHARED_LIBRARY)

2. geolo.cpp
先用FindClass方法找到java类,有点类似java的反射用LoadClass
再用CallObjectMethod方法调用Java类的函数。

[c-sharp] view plainprint?
#include "my_jni.h"
jobject getInstance(JNIEnv* env, jclass obj_class){
jmethodID construction_id = env->GetMethodID(obj_class, "<init>", "()V");
jobject obj = env->NewObject(obj_class, construction_id);
return obj;
}
JNIEXPORT jstring JNICALL Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv* env, jobject thiz){
jstring str;
jclass java_class = env->FindClass("com/easepal/geolo/CForCall");
if (java_class == 0){
return env->NewStringUTF("not find class!");
}
jobject java_obj = getInstance(env, java_class);
if (java_obj == 0){
return env->NewStringUTF("not find java OBJ!");
}
jmethodID java_method = env->GetMethodID(java_class, "GetJavaString", "()Ljava/lang/String;");
if(java_method == 0){
return env->NewStringUTF("not find java method!");
}
str = (jstring)env->CallObjectMethod(java_obj, java_method);
return str;
}
3. my_jni.h

[c-sharp] view plainprint?
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_easepal_geolo_CActivityMain */
#ifndef _Included_com_easepal_geolo_CActivityMain
#define _Included_com_easepal_geolo_CActivityMain
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_easepal_geolo_CActivityMain
* Method: stringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif

4. CActivityMain.java

[c-sharp] view plainprint?
package com.easepal.geolo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class CActivityMain extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText( stringFromJNI("hello") );
setContentView(tv);
}

static {
System.loadLibrary("native");
}
public native String stringFromJNI(String str);
}

5. CForCall.java

[c-sharp] view plainprint?
package com.easepal.geolo;
public class CForCall{
public CForCall(){};
//public ~CForCall(){};
public String GetJavaString(){
String str;
str = "123456";
return str;
}
}

H. 如何在安卓手机里运行JAVA程序

  1. 安装JAVA程序方法:

  2. 在网站上搜索一个APK格式的JAVA虚拟机,下载安装程序后安装在手机上,

  3. 安装后手机上“所有程序”中增加此程序的图标,如下图(安装方法与安装其他程序一样,通过手机浏览器下载安装或通过电脑下载安装包)

I. android如何调用java类,java类能正常运行,调用到android就卡死了

android环境下只能调用Android SDK API中的类,不能够调用Java API中的类。
Android SDK API中有少部分包以java开头,例如java.io,java.beans,java.io,java.lang等,这些包是Java API中已经实现的而被Android API直接封装的。
这是我查Android API和Java API得到的一些理解,不知准不准确,你最好查查两者的API,对比下再好好理解。

J. 如何在Android包中调用Java包中的函数

用import导入即可,如:import java.net.* 这样就可以进行网络编程了。

如果是你自己创建的函数,可以把它放到你的应用程序代码所在的文件夹里面,在你写的类的第一行加入和其他代码同样的包声明即可,记得写成公共类。

热点内容
php怎么反编译 发布:2025-01-19 14:10:54 浏览:590
加密货币交易平台排名 发布:2025-01-19 13:58:21 浏览:741
红绿灯的编程 发布:2025-01-19 13:57:37 浏览:113
老男孩linux教程 发布:2025-01-19 13:44:48 浏览:941
买车怎么区分车配置 发布:2025-01-19 13:44:45 浏览:242
丢失缓存视频 发布:2025-01-19 13:44:09 浏览:183
C语言tp 发布:2025-01-19 13:26:20 浏览:107
手机qq改变存储位置 发布:2025-01-19 13:25:17 浏览:83
吃解压海鲜 发布:2025-01-19 13:23:50 浏览:820
sql子表 发布:2025-01-19 13:23:11 浏览:334