sencha touch 2 kryonet socket phonegap 통신 저자:도시 포위
16448 단어 sencha touch2
저 는 글 쓰 는 것 을 그다지 좋아 하지 않 습 니 다.구체 적 으로 코드 를 보 세 요.
전재
http://www.cnblogs.com/solq
http://www.cnblogs.com/solq/archive/2012/04/21/2462208.html
http://files.cnblogs.com/solq/sencha-touch2-kryonet-socket-phonegap-%E9%80%9A%E4%BF%A1-(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.자바 확장 phonegap 종류
/*
* sencha touch2 kryonet socket phonegap
* : (solq)
* blog:http://www.cnblogs.com/solq/ *
* */
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 {
@Override
public 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
3.js 등록 자바 클래스
/*
* sencha touch2 kryonet socket phonegap
* : (solq)
* blog:http://www.cnblogs.com/solq/
* */
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.자바 콜 js//phonegap 방식 으로
주의 handler 크로스 스 레 드 접근 해결
appView.loadUrl("javascript:alert('" + xxx + "')");
6.main 붙 이 는 걸 깜빡 했 어
/*
* sencha touch2 kryonet socket phonegap
* : (solq)
* blog:http://www.cnblogs.com/solq/
* */
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;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/chatTenchaTouch/index.html");
appView.setFocusable(true);
appView.setFocusableInTouchMode(true);
handler = new Handler() {
@Override
public 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();
}
@Override
public 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();
}