2017-07-19 2 views
1

私はTCPクライアント後に音を振動させるTCPサーバーを持っているが、それにパッケージを送ったが、今私は、TCPからの場合はカウンターというほしいですサーバです!60秒後に0を返しますは音と振動を繰り返しますが、その実装方法はわかりませんIFは60秒後にカウンタが変更された場合に制御します。 おそらく単純な解決策がありますが、私はアンドロイドで新しいです。変数変更をチェック私のプロジェクトでいくつかの時間後に

public class Server { 
DataBaseHandler myDB; 
allert Allert; 
MainActivity activity; 
RecyclerViewAdapter adapterView; 
Adapter adapter; 
ServerSocket serverSocket; 
public static int count=0; 
String letto = ""; 
private SharedPreferences prefs; 
static final int socketServerPORT = 8080; 

public Server(MainActivity activity) { 
    this.activity = activity; 
    Thread socketServerThread = new Thread(new SocketServerThread()); 
    socketServerThread.start(); 
} 

public int getPort() { 
    return socketServerPORT; 
} 


public void onDestroy() { 
    if (serverSocket != null) try { 
     serverSocket.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 


private class SocketServerThread extends Thread { 
    Vibrator vibrator; 
    String date,ora; 
    long[] pattern = {0, 1000, 500, 1000, 500, 1000}; 

    int lun; 

    @Override 
    public void run() { 
     InputStream leggi; 
     try { 


      serverSocket = new ServerSocket(socketServerPORT); 

      while (true) { 
       myDB = DataBaseHandler.getInstance(activity); 

       Socket socket = serverSocket.accept(); 
       leggi = socket.getInputStream(); 
       byte[] data = new byte[1000]; 
       lun = leggi.read(data, 0, data.length); 
       letto = new String(data, "UTF-8"); 
       count++; 
       MediaPlayer mPlay = MediaPlayer.create(activity, R.raw.gabsuono); 
       mPlay.start(); 

       vibrator = (Vibrator) activity.getSystemService(VIBRATOR_SERVICE); 
       vibrator.vibrate(pattern, -1); 

       date = new SimpleDateFormat("dd-MM-yyyy").format(new Date()); 
       ora = new SimpleDateFormat("HH:mm:ss").format(new Date()); 
       myDB.insertDataServer(date, ora, letto); 








         activity.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 

         allert.refreshing.setVisibility(View.VISIBLE); 
         prefs = activity.getSharedPreferences("MY_DATA", MODE_PRIVATE); 
         SharedPreferences.Editor edit = prefs.edit(); 
         edit.putInt("counter", count); 
         edit.commit(); 
         MainActivity.msg.setText(String.valueOf(count)); 
         MainActivity.msg.setVisibility(View.VISIBLE); 

        } 
       }); 
       leggi.close(); 


      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 

     } 

    } 


} 

public void Parti() { 
    prefs = activity.getSharedPreferences("MY_DATA", MODE_PRIVATE); 
    count = prefs.getInt("counter", count); 
    MainActivity.msg.setText("" + count); 
    if (count == 0) 
     MainActivity.msg.setVisibility(View.INVISIBLE); 
    else 
     MainActivity.msg.setVisibility(View.VISIBLE); 


    } 

} 
+1

...それがお役に立てば幸い60秒後にチェックする?それは 'カウント'ですか? – Ivan

+0

カウント変数 –

+0

をチェックしたいのですが、60秒ごとにチェックするか、60秒後に1回だけチェックしますか? – Ivan

答えて

2

あなたはHandler#postDelayedにこのコードを使用することができます。..

final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 

     //Check something after 60 seconds 

     handler.postDelayed(this, 60000); //1000ms = 1seconds * 60 
     } 
    }, 1); // first trigger 1ms. change this if you want to starts at 60 sec make it 60000 

がしたい一つである変数

+0

実際にはこれはMainActivityでは正常に動作しますが、最初の起動時には60秒前に起動し、その後は正常に動作します。 –

+0

最初の60秒間にトリガしたい場合は、最後のコード行で1〜60000を編集できます。 。編集のコメントを参照してください:) – Rai

1

=だけで、あなたが最初の振動日付を取得、それを格納し、カウンタが0の場合、再び日付を取得し、:!ここ

は私のServer.javaコードです2回の間の距離を計算します。 60秒を超える場合は、最初の日付を更新して振動させます。アルゴリズムを繰り返します。あなたのコードの簡易版で

デモ:

long date1 = -1; 
while(true){  
    if(date1!= -1 && counter!=0){ 
     long date2 = System.currentTimeInMillis(); 
     if(date2-date1>60000){//60 seconds 
      vibrateAgain(); 
      date1 = date2; //don't forget to update the date 

     }   
    } 

//your code ... 
vibrateFirstTime(); 
date1 = System.currentTimeInMillis(); 
} 
+0

おそらく何か問題があります。なぜなら、60秒も経たないうちに、おそらく私はMainActivityでこのコードを実行しなければならないからです。 –