您的位置:首页 > 其它

3001-os-morse-code

2014-05-21 18:07 239 查看
通过震动识别数字

/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache Licen
4000
se, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0 *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.example.android.apis.os;

// Need the following import to get access to the app resources, since this
// class is in a sub-package.

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.TextView;
import com.example.android.apis.R;

/**
* <h3>App that vibrates the vibrator with the Morse Code for a string.</h3>

<p>This demonstrates the {@link android.os.Vibrator android.os.Vibrator} class.

<h4>Demo</h4>
OS / Morse Code Vibrator

<h4>Source files</h4>
* <table class="LinkTable">
* <tr>
* <td >src/com.example.android.apis/os/MorseCode.java</td>
* <td >The Morse Code Vibrator</td>
* </tr>
* <tr>
* <td >res/any/layout/morse_code.xml</td>
* <td >Defines contents of the screen</td>
* </tr>
* </table>
*/
public class MorseCode extends Activity
{
/** Tag string for our debug logs */
private static final String TAG = "MorseCode";

/** Our text view */
private TextView mTextView;

;

/**
* Initialization of the Activity after it is first created. Must at least
* call {@link android.app.Activity#setContentView setContentView()} to
* describe what is to be displayed in the screen.
*/
@Override
protected void onCreate(Bundle savedInstanceState)
{
// Be sure to call the super class.
super.onCreate(savedInstanceState);

// See assets/res/any/layout/hello_world.xml for this
// view layout definition, which is being set here as
// the content of our screen.
setContentView(R.layout.morse_code);

// Set the OnClickListener for the button so we see when it's pressed.
findViewById(R.id.button).setOnClickListener(mClickListener);

// Save the text view so we don't have to look it up each time
mTextView = (TextView)findViewById(R.id.text);
}

/** Called when the button is pushed */
View.OnClickListener mClickListener = new View.OnClickListener() {
public void onClick(View v) {
// Get the text out of the view
String text = mTextView.getText().toString();

// convert it using the function defined above. See the docs for
// android.os.Vibrator for more info about the format of this array
long[] pattern = MorseCodeConverter.pattern(text);

// Start the vibration
Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern, -1);
}
};
}

/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0 *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.example.android.apis.os;

/** Class that implements the text to morse code coversion */
class MorseCodeConverter {
private static final long SPEED_BASE = 100;
static final long DOT = SPEED_BASE;
static final long DASH = SPEED_BASE * 3;
static final long GAP = SPEED_BASE;
static final long LETTER_GAP = SPEED_BASE * 3;
static final long WORD_GAP = SPEED_BASE * 7;

/** The characters from 'A' to 'Z' */
private static final long[][] LETTERS = new long[][] {
/* A */ new long[] { DOT, GAP, DASH },
/* B */ new long[] { DASH, GAP, DOT, GAP, DOT, GAP, DOT },
/* C */ new long[] { DASH, GAP, DOT, GAP, DASH, GAP, DOT },
/* D */ new long[] { DASH, GAP, DOT, GAP, DOT },
/* E */ new long[] { DOT },
/* F */ new long[] { DOT, GAP, DOT, GAP, DASH, GAP, DOT },
/* G */ new long[] { DASH, GAP, DASH, GAP, DOT },
/* H */ new long[] { DOT, GAP, DOT, GAP, DOT, GAP, DOT },
/* I */ new long[] { DOT, GAP, DOT },
/* J */ new long[] { DOT, GAP, DASH, GAP, DASH, GAP, DASH },
/* K */ new long[] { DASH, GAP, DOT, GAP, DASH },
/* L */ new long[] { DOT, GAP, DASH, GAP, DOT, GAP, DOT },
/* M */ new long[] { DASH, GAP, DASH },
/* N */ new long[] { DASH, GAP, DOT },
/* O */ new long[] { DASH, GAP, DASH, GAP, DASH },
/* P */ new long[] { DOT, GAP, DASH, GAP, DASH, GAP, DOT },
/* Q */ new long[] { DASH, GAP, DASH, GAP, DOT, GAP, DASH },
/* R */ new long[] { DOT, GAP, DASH, GAP, DOT },
/* S */ new long[] { DOT, GAP, DOT, GAP, DOT },
/* T */ new long[] { DASH },
/* U */ new long[] { DOT, GAP, DOT, GAP, DASH },
/* V */ new long[] { DOT, GAP, DOT, GAP, DASH },
/* W */ new long[] { DOT, GAP, DASH, GAP, DASH },
/* X */ new long[] { DASH, GAP, DOT, GAP, DOT, GAP, DASH },
/* Y */ new long[] { DASH, GAP, DOT, GAP, DASH, GAP, DASH },
/* Z */ new long[] { DASH, GAP, DASH, GAP, DOT, GAP, DOT },
};

/** The characters from '0' to '9' */
private static final long[][] NUMBERS = new long[][] {
/* 0 */ new long[] { DASH, GAP, DASH, GAP, DASH, GAP, DASH, GAP, DASH },
/* 1 */ new long[] { DOT, GAP, DASH, GAP, DASH, GAP, DASH, GAP, DASH },
/* 2 */ new long[] { DOT, GAP, DOT, GAP, DASH, GAP, DASH, GAP, DASH },
/* 3 */ new long[] { DOT, GAP, DOT, GAP, DOT, GAP, DASH, GAP, DASH },
/* 4 */ new long[] { DOT, GAP, DOT, GAP, DOT, GAP, DOT, GAP, DASH },
/* 5 */ new long[] { DOT, GAP, DOT, GAP, DOT, GAP, DOT, GAP, DOT },
/* 6 */ new long[] { DASH, GAP, DOT, GAP, DOT, GAP, DOT, GAP, DOT },
/* 7 */ new long[] { DASH, GAP, DASH, GAP, DOT, GAP, DOT, GAP, DOT },
/* 8 */ new long[] { DASH, GAP, DASH, GAP, DASH, GAP, DOT, GAP, DOT },
/* 9 */ new long[] { DASH, GAP, DASH, GAP, DASH, GAP, DASH, GAP, DOT },
};

private static final long[] ERROR_GAP = new long[] { GAP };

/** Return the pattern data for a given character */
static long[] pattern(char c) {
if (c >= 'A' && c <= 'Z') {
return LETTERS[c - 'A'];
}
if (c >= 'a' && c <= 'z') {
return LETTERS[c - 'a'];
}
else if (c >= '0' && c <= '9') {
return NUMBERS[c - '0'];
}
else {
return ERROR_GAP;
}
}

static long[] pattern(String str) {
boolean lastWasWhitespace;
int strlen = str.length();

// Calculate how long our array needs to be.
int len = 1;
lastWasWhitespace = true;
for (int i=0; i<strlen; i++) {
char c = str.charAt(i);
if (Character.isWhitespace(c)) {
if (!lastWasWhitespace) {
len++;
lastWasWhitespace = true;
}
} else {
if (!lastWasWhitespace) {
len++;
}
lastWasWhitespace = false;
len += pattern(c).length;
}
}

// Generate the pattern array.  Note that we put an extra element of 0
// in at the beginning, because the pattern always starts with the pause,
// not with the vibration.
long[] result = new long[len+1];
result[0] = 0;
int pos = 1;
lastWasWhitespace = true;
for (int i=0; i<strlen; i++) {
char c = str.charAt(i);
if (Character.isWhitespace(c)) {
if (!lastWasWhitespace) {
result[pos] = WORD_GAP;
pos++;
lastWasWhitespace = true;
}
} else {
if (!lastWasWhitespace) {
result[pos] = LETTER_GAP;
pos++;
}
lastWasWhitespace = false;
long[] letter = pattern(c);
System.arraycopy(letter, 0, result, pos, letter.length);
pos += letter.length;
}
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: