您的位置:首页 > 移动开发 > WebAPP

Native+WebApp中Phonegap调用Android Activity

2012-12-09 21:58 561 查看
摘自:http://topmanopensource.iteye.com/blog/1577717


在项目采用Native+Web方式开发,Android团队开发一个模块的代码,WebApp phonegap开发几个模块,需要将Android中的模块潜入到Phonegap开发的几个模块中。需要通过Phonegap调用Android 的Activity。

demo如下:

Phonegap插件类:

Java代码



package com.easyway.etrip.plugins;

import org.json.JSONArray;

import android.app.Activity;

import android.content.Intent;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import com.phonegap.api.Plugin;

import com.phonegap.api.PluginResult;

/**

* Phonegap 调用Android Activity的插件

*

* @Title:

* @Description: 实现TODO

* @Copyright:Copyright (c) 2011

* @Company:易程科技股份有限公司

* @Date:2012-7-5

* @author longgangbai

* @version 1.0

*/

publicclass AndroidActivityPlugin extends Plugin{

private Object synObj = new Object();

@Override

public PluginResult execute(String action, JSONArray data, String callbackID) {

// TODO Auto-generated method stub

if(action.equals("startActivity")){

PluginResult result = null;

try {

PluginResult.Status status = PluginResult.Status.OK;

if(action.equals("startActivity")){

Log.e("test", "test plugin js -> java~~~~"+data.getString(0));

Log.e("test", "test plugin js -> java~~~~");

result = new PluginResult(status, data.getString(0));

Message msg=new Message();

msg.what=1;

Log.e("参数信息:", data.toString());

msg.obj=data.getString(0);

handler.sendMessage(msg);

sleep();

}

} catch (Exception e) {

}

return result;

}else {

returnnew PluginResult(PluginResult.Status.INVALID_ACTION);

}

}

private Handler handler = new Handler() {

publicvoid handleMessage(Message msg) {

if (msg == null) {

return;

}

switch (msg.what) {

case1:

String className=msg.obj.toString();

try {

Class activityClass = Class.forName(className);

Intent intent = new Intent(ctx.getBaseContext(), activityClass);//你想去的activity(exp:Temp)

ctx.startActivityForResult(AndroidActivityPlugin.this, intent, 1);

} catch (ClassNotFoundException e) {

Log.e("Why", "错误原因:"+className);

e.printStackTrace();

}

break;

}

};

};

@Override

publicvoid onActivityResult(int requestCode, int resultCode, Intent intent) {

// TODO Auto-generated method stub

if(requestCode==1){

if(resultCode == Activity.RESULT_CANCELED){

//返回时调用

Log.e("test", "result plugin -> java~~~~");

Log.e("test", "result plugin -> java~~~~");

weakup();

}

}else{

super.onActivityResult(requestCode, resultCode, intent);

}

}

privatevoid sleep()

{

try

{

synchronized(synObj)

{

synObj.wait();

}

}

catch (InterruptedException e)

{

e.printStackTrace();

}

}

privatevoid weakup()

{

synchronized(synObj)

{

synObj.notify();

}

}

}

package com.easyway.etrip.plugins;

import org.json.JSONArray;

import android.app.Activity;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;
/**
* Phonegap 调用Android Activity的插件
*
* @Title:
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-7-5
* @author  longgangbai
* @version 1.0
*/
public class AndroidActivityPlugin  extends Plugin{

private Object synObj = new Object();
@Override
public PluginResult execute(String action, JSONArray data, String callbackID) {
// TODO Auto-generated method stub
if(action.equals("startActivity")){
PluginResult result = null;

try {
PluginResult.Status status = PluginResult.Status.OK;
if(action.equals("startActivity")){
Log.e("test", "test plugin js -> java~~~~"+data.getString(0));
Log.e("test", "test plugin js -> java~~~~");
result = new PluginResult(status, data.getString(0));
Message msg=new Message();
msg.what=1;
Log.e("参数信息:", data.toString());
msg.obj=data.getString(0);
handler.sendMessage(msg);
sleep();
}
} catch (Exception e) {
}
return result;
}else {
return new PluginResult(PluginResult.Status.INVALID_ACTION);
}

}
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg == null) {
return;
}
switch (msg.what) {
case 1:
String className=msg.obj.toString();
try {
Class activityClass = Class.forName(className);
Intent intent = new Intent(ctx.getBaseContext(), activityClass);//你想去的activity(exp:Temp)
ctx.startActivityForResult(AndroidActivityPlugin.this, intent, 1);
} catch (ClassNotFoundException e) {
Log.e("Why", "错误原因:"+className);
e.printStackTrace();
}
break;
}
};
};

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
// TODO Auto-generated method stub
if(requestCode==1){
if(resultCode == Activity.RESULT_CANCELED){
//返回时调用
Log.e("test", "result plugin -> java~~~~");
Log.e("test", "result plugin -> java~~~~");
weakup();
}
}else{
super.onActivityResult(requestCode, resultCode, intent);
}
}

private void sleep()
{
try
{
synchronized(synObj)
{
synObj.wait();
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}

private void weakup()
{
synchronized(synObj)
{
synObj.notify();
}
}

}


phonegap启动类:

Java代码



package com.easyway.etrip;

import android.os.Bundle;

import com.phonegap.DroidGap;

/**

* phonegap启动类

*

* @Title:

* @Description: 实现TODO

* @Copyright:Copyright (c) 2011

* @Company:易程科技股份有限公司

* @Date:2012-7-5

* @author longgangbai

* @version 1.0

*/

publicclass PhonegapAndroidActivityActivity extends DroidGap {

/** Called when the activity is first created. */

@Override

publicvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.loadUrl("file:///android_asset/www/index.html");

}

}

package com.easyway.etrip;

import android.os.Bundle;

import com.phonegap.DroidGap;
/**
* phonegap启动类
*
* @Title:
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-7-5
* @author  longgangbai
* @version 1.0
*/
public class PhonegapAndroidActivityActivity extends DroidGap  {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
}
}


Android的Activity类:

Java代码



package com.easyway.etrip;

import android.app.Activity;

import android.os.Bundle;

/**

*

*

* @Title:

* @Description: 实现TODO

* @Copyright:Copyright (c) 2011

* @Company:易程科技股份有限公司

* @Date:2012-7-5

* @author longgangbai

* @version 1.0

*/

publicclass ThirdAndroidActivity extends Activity {

/** Called when the activity is first created. */

@Override

publicvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.setContentView(R.layout.main);

}

}

package com.easyway.etrip;

import android.app.Activity;
import android.os.Bundle;
/**
*
*
* @Title:
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-7-5
* @author  longgangbai
* @version 1.0
*/
public class ThirdAndroidActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
}
}


phonegap的插件配置类phonegap.xml:

Xml代码



<pluginname="AndroidActivity"value="com.easyway.etrip.plugins.AndroidActivityPlugin"/>

<plugin name="AndroidActivity" value="com.easyway.etrip.plugins.AndroidActivityPlugin"/>


androidActivity.js

Js代码



var AndroidActivity=function(){};

AndroidActivity.prototype.startActivity = function(success, fail,parmas)

{

return PhoneGap.exec(

function(args){ success(args); },

function(args){ fail(args); },

'AndroidActivity', //java类

'startActivity', //action

[parmas] //params

);

};

PhoneGap.addConstructor(function() {

PhoneGap.addPlugin('androidActivity', new AndroidActivity());

});

var AndroidActivity=function(){};
AndroidActivity.prototype.startActivity = function(success, fail,parmas)
{
return PhoneGap.exec(
function(args){ success(args); },
function(args){ fail(args); },
'AndroidActivity', //java类
'startActivity', //action
[parmas] //params
);
};
PhoneGap.addConstructor(function() {
PhoneGap.addPlugin('androidActivity', new AndroidActivity());
});


调用的测试类:

Html代码



<!DOCTYPE HTML>

<html>

<head>

<metaname="viewport"content="width=320; user-scalable=no"/>

<metahttp-equiv="Content-type"content="text/html; charset=utf-8">

<title>Minimal AppLaud App</title>

<scripttype="text/javascript"charset="utf-8"src="phonegap-1.4.1.js"></script>

<scripttype="text/javascript"charset="utf-8"src="androidActivity.js"></script>

<scripttype="text/javascript"charset="utf-8">

function openAndroidActivity(){

window.plugins.androidActivity.startActivity(

function(r){//alert(r);

},

function(e){//alert(e);

},

"com.easyway.etrip.ThirdAndroidActivity"

);

}

</script>

</head>

<body>

<h1>Hello World</h1>

<inputtype="button"value="打开Android Activity"onclick="javascript:openAndroidActivity();">

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: