當前位置:首頁 » 安卓系統 » 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.* 這樣就可以進行網路編程了。

如果是你自己創建的函數,可以把它放到你的應用程序代碼所在的文件夾裡面,在你寫的類的第一行加入和其他代碼同樣的包聲明即可,記得寫成公共類。

熱點內容
微信上的電影怎麼下載或緩存 發布:2025-01-19 14:30:57 瀏覽:826
如何在外網訪問伺服器 發布:2025-01-19 14:29:45 瀏覽:380
百度重定向腳本 發布:2025-01-19 14:29:36 瀏覽:428
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