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.* 這樣就可以進行網路編程了。
如果是你自己創建的函數,可以把它放到你的應用程序代碼所在的文件夾裡面,在你寫的類的第一行加入和其他代碼同樣的包聲明即可,記得寫成公共類。