当前位置: 首页 > 工具软件 > KryoNet > 使用案例 >

sencha touch2 kryonet socket phonegap 通信 作者:围城

万俟震博
2023-12-01

sencha touch2 kryonet socket phonegap  通信 作者:围城

我不太喜欢写文章,具体请看代码吧。

转载请注明。。。。

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.java 扩展 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

 <plugin name="SendMsg" value="org.solq.plugins.SendMsg"/>

3.js 注册 java 类

 

/*
 * 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.java call 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(); 

}

  

转载于:https://www.cnblogs.com/solq/archive/2012/04/21/2462208.html

 类似资料: