android调用java
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的方法
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程序
安装JAVA程序方法:
在网站上搜索一个APK格式的JAVA虚拟机,下载安装程序后安装在手机上,
安装后手机上“所有程序”中增加此程序的图标,如下图(安装方法与安装其他程序一样,通过手机浏览器下载安装或通过电脑下载安装包)
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.* 这样就可以进行网络编程了。
如果是你自己创建的函数,可以把它放到你的应用程序代码所在的文件夹里面,在你写的类的第一行加入和其他代码同样的包声明即可,记得写成公共类。