围城"/>
sencha touch2 kryonet socket phonegap 通信 作者:围城
sencha touch2 kryonet socket phonegap 通信 作者:围城
我不太喜欢写文章,具体请看代码吧。
转载请注明。。。。
.html
(solq).rar
配置 phonegap 使用的是 phonegap 1.4版
1.引用 phonegap .jar 包,
2.复制解压的 xml到 \res\xml\
3.配置 AndroidManifest.xml
<supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:resizeable="true" android:anyDensity="true" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 在activity 标签里加上 android:configChanges="orientation|keyboardHidden"
1.java 扩展 phonegap 类
/** sencha touch2 kryonet socket phonegap 通信 * 作者:围城(solq)* blog:/ * * */ package org.solq.plugins; import org.json.JSONArray; import org.solq.deom.MyClient; import org.solq.deom.Network.ChatMessage;import android.util.Log;import com.phonegap.api.Plugin; import com.phonegap.api.PluginResult;public class SendMsg extends Plugin {@Overridepublic PluginResult execute(String action, JSONArray jSONArray, String callbackId) {try {String t="hello";if(action.equals("sendMsg")) //发送消息 { //do code }ChatMessage request=new ChatMessage();request.text=jSONArray.getJSONObject(0).getString("text");//MyClient.getInstantiation().getClient().sendTCP(request);t="发送数据成功!!!";Log.v("action++++++++++", action);Log.v("jSONArray++++++++++", jSONArray.toString());return new PluginResult(PluginResult.Status.OK, request.text);} catch (Exception e) {return new PluginResult(PluginResult.Status.ERROR,"error");}}}
2.xml 注册扩展类
\res\xml\plugins.xml
<plugin name="SendMsg" value="org.solq.plugins.SendMsg"/>
3.js 注册 java 类
/** sencha touch2 kryonet socket phonegap 通信 * 作者:围城(solq)* blog:/* */ var AndroidAPI=function(){}; AndroidAPI.prototype.send = function(params, success, fail){return PhoneGap.exec(function(args){success(args);}, function(args){fail(args);}, 'SendMsg', //java类'sendMsg', //action[params] //params ); };PhoneGap.addConstructor(function() {PhoneGap.addPlugin('AndroidAPI', new AndroidAPI()); });
4. js call java
//调用 java 类window.plugins.AndroidAPI.send({text:text},function(r){//alert("发送消息成功:" + r); },function(e){});
5.java call js // 用 phonegap 方式
注意:用 handler 解决跨线程访问
appView.loadUrl("javascript:alert('" + xxx + "')");
6.忘了贴上main
/** sencha touch2 kryonet socket phonegap 通信 * 作者:围城(solq)* blog:/* */ package org.solq.deom;import org.solq.deom.Network.ChatMessage; import org.solq.deom.Network.RegisterName;import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log;import com.esotericsoftware.kryonet.Client; import com.esotericsoftware.kryonet.Connection; import com.esotericsoftware.kryonet.Listener; import com.phonegap.DroidGap;public class TestPhonegapPluginActivity extends DroidGap {public static Handler handler ; Client client;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.loadUrl("file:///android_asset/chatTenchaTouch/index.html");appView.setFocusable(true);appView.setFocusableInTouchMode(true);handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 0:appView.loadUrl("javascript:callJs('" + msg.obj + "')");break;default:break;}}};MyClient myClient=MyClient.getInstantiation(); client = myClient.getClient();}@Overridepublic void onDestroy() { client.close();client.stop();Log.v("onDestroy", "onDestroy");android.os.Process.killProcess(android.os.Process.myPid());super.onDestroy(); //finish(); //强制在系统服务里 force stop } }
程序退出了,系统里还挂着。当再运行程序时,,,会出错。解决方法:
1.当 onDestroy 时,不关闭 socket ,另做一个 退出处理
2.当 onDestroy 时,关闭 sokcet ,关闭程序进程 android.os.Process.killProcess(android.os.Process.myPid());
@Override
public void onDestroy() { client.close();
client.stop();
Log.v("onDestroy", "onDestroy");
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy(); }
转载于:.html
更多推荐
sencha touch2 kryonet socket phonegap 通信 作者:围城
发布评论