3

Android プラットフォーム (APILevel 17) でのアクセシビリティ研究プロジェクト用のキーロガー Android アプリケーションを構築するために、いくつかのリソースを見つけようとしています。

アプリケーションのインターフェイスは、[入力設定から必要なキーボードを選択した後]仮想オンスクリーン キーボードを使用してユーザーが入力する単純な「EditText」フィールドになります。

私は自分のアプリケーション用に Keylog データベースを作成することを目指しています (私はそれに慣れているので SQLite DB を使用しますが、単純な csv ファイル DB もうまく機能します! :))、次のようになります: ここに画像の説明を入力(図)

したがって、入力されたらすぐに、新しいエントリの各文字をタイムスタンプと共に記録する必要があります。「TextWatcher」クラスを試してみました

    EditText KeyLogEditText = (EditText) findViewById(R.id.editTextforKeyLog);
    TextWatcher KeyLogTextWatcher = new TextWatcher() {
        
        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) 
        {   }
        
        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) 
        {   }
        
        @Override
        public void afterTextChanged(Editable arg0) {
    // TODO Log the characters in the SQLite DB with a timeStamp etc.
    // Here I call my database each time and insert an entry in the database table. 
    //I am yet to figure out how to find the latest-typed-character by user in the EditText 
                            
        }

私の質問は次のとおりです。

  1. これはこれを実装する正しい方法ですか?
  2. 時刻とともに入力された正確に 1 つの文字を取得し、後で取得して分析できる SQLite DB に挿入できますか??
  3. または、onKeyUpメソッドの方が便利でしょうか? [私はまだ試した方法を使用していないので、誰かがこれを使用してキーロガーを構築する方法を教えてくれれば、それがより簡単であれば素晴らしいことです!]

*何らかの形で私を助けてくれる人に、事前に感謝します!

アディット*

4

1 に答える 1

2

今のところ、TextWatcher は EditText にバインドされていません

addTextChangedListener(TextWatcher yourWatcher)EditTextで使用する必要があります。これが私の例です:

      smsET.addTextChangedListener(new TextWatcher() {

        public void onTextChanged(CharSequence s, int start, int before, int count) {
        Log.d(TAG, "onTextChanged start :"+start +"  end :"+count);}
        public void beforeTextChanged(CharSequence s, int start, int count,int after) {
            Log.d(TAG, "beforeTextChanged start :"+start +"  after :"+after);
        }

        public void afterTextChanged(Editable s) {
                int lastPosition = s.length()-1;
            char lastChar = s.charAt(lastPosition);
            Log.d(TAG, "afterTextChange last char"+lastChar );
        }

    });

コードでは、次のようになります。

KeyLogEditText.addTextChangeListener(KeyLogTextWatcher );

このウォッチャーに含まれる各メソッドは、キーボードからすべての記号を入力することによってトリガーされます。入力後に位置を取得するので、入力した文字を簡単に取得できます

あなたが言及したデータを保存するには、SharedPreferences が DB よりも高速になります。(DB への多くの書き込み) ターゲットが少なくとも api 11の場合、ターゲットがそれより低い場合はStringSet Editor.putStringSetを単純に使用できます。例: http://androidcodemonkey.blogspot.com/2011/07/store -and-get-object-in-android-shared.html

.

于 2012-12-23T15:03:40.553 に答える