客户端:
int set_screen_time_out(int interval)
{
char tmpbuff[20]={0};
sprintf(tmpbuff, "%d", interval);
// Socket to listen on for incomming framework connections
if ((fw_socket = socket_local_client(TS_CAL_SOCKET,
ANDROID_SOCKET_NAMESPACE_ABSTRACT,
SOCK_STREAM)) < 0) {
LOGE("Obtaining file descriptor socket '%s' failed: %s",
TS_CAL_SOCKET, strerror(errno));
return -1;
}
LOGI("send to fw_socket :%s %d", tmpbuff, strlen(tmpbuff));
if(send(fw_socket, tmpbuff, strlen(tmpbuff), 0) <= 0 )
{
LOGE("send data to server : '%s' failed", strerror(errno));
close(fw_socket);
return -1;
}
close(fw_socket);
return 0;
}
服务端:
public class TSCalibrateSocket implements Runnable
{
public final String TS_SOCKET = "TS_CALIBRATE_SOCKET";
public static final int SERVERPORT = 50113;
private LocalServerSocket mServerSocket;
private final String TAG = "TS_CALIBRATE";
private byte[] buffer = new byte[100];
private Context mContext;
private static PowerManager.WakeLock sWakeLock;
private final String WAKELOCK_TAG = "TS_CALIBRATE";
private PowerManager powerManager;
private final String fileName = "/data/etc/pointercal";
TSCalibrateSocket(Context context)
{
mContext = context;
try{
mServerSocket = new LocalServerSocket(TS_SOCKET);
}catch(Exception ex)
{
ex.printStackTrace();
}
powerManager =
(PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
sWakeLock =
powerManager.newWakeLock(
PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE,
WAKELOCK_TAG);
}
public void run()
{//listen thread is working.
Log.i(TAG,
"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
boolean exists = (new File(fileName)).exists();
if(exists){
Log.d(TAG, "file is exsits.");
Log.i(TAG,
"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
return;
}
Log.i(TAG,
"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
int time_out = 1000;
int time_out_old = 30000;
try {
time_out_old = Settings.System.getInt(mContext.getContentResolver(),
SCREEN_OFF_TIMEOUT, 30000);
Log.i(TAG, "get SCREEN_OFF_TIMEOUT :" + String.valueOf(time_out_old));
} catch (NumberFormatException e) {
Log.e(TAG, "read get int could not persist screen timeout setting", e);
}
powerManager.userActivity(SystemClock.uptimeMillis(), false);
sWakeLock.acquire();
while(true)
{
try{
Log.e(TAG, "1");
LocalSocket client = mServerSocket.accept();
Log.e(TAG, "2");
BufferedReader in = new
BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
Log.i(TAG, "get Buffer : " + str);
time_out = Integer.parseInt(str);
client.close();
} catch (Exception ex) {
Log.e(TAG, "IOException in listenToSocket",ex);
}
if(time_out != -1)
{
Log.i(TAG, "Set back screen timeout :" +
String.valueOf(time_out_old));
try {
Settings.System.putInt(mContext.getContentResolver(),
SCREEN_OFF_TIMEOUT, time_out_old);
} catch (NumberFormatException e) {
Log.e(TAG, "Set back could not persist screen timeout setting",e);
}
break;
}else
{
Log.i(TAG, "Set screen timeout :"
+String.valueOf(time_out));
try {
Settings.System.putInt(mContext.getContentResolver(),
SCREEN_OFF_TIMEOUT, time_out);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist screen timeout setting",e);
}
}
}
sWakeLock.release();
powerManager.userActivity(SystemClock.uptimeMillis(), false);
/*
try{
mServerSocket.close();
}catch(Exception ex){
Log.e(TAG, "Close ServerSocket: ", ex);
}
*/
}
}