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) 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; } }
相关文章推荐
- Android System.exit(code) and android.os.Process.killProcess(pid)或者发生RunTimeException 导致应用重启
- DSS Source Code Analyse (27) - OSBufferPool
- xcode 和os 更新后(x-code 6.1 + os 10.10.1 )遇到"OpenGL ES 2.O is required"
- International Morse Code
- CSUOJ 1269 Morse Code Wristwatch
- intall vs code in elementary os
- OSStatus code 查询
- CSU 1269: Morse Code Wristwatch(模拟啊 )
- Flutter beta 版尝鲜(在 Windows + Android Studio 与 MacOS + VS Code 的安装配置)
- Cpp环境【NOIP2003 P3】【Vijos1100】【Code[VS]1090】【CQYZOS2816】加分二叉树
- An update on OS X Code Signing(OS X代码签名)
- Example Code of Using XML Parser in Symbian OS
- Visual Studio Code + Golang1.5 debug + MAC OS X 10.11
- python之os -- show me the code 0005
- ERROR: Unable to identify a valid CodeWarrior for Symbian OS installation
- ubuntu /elementary os下vscode 配置go开发环境
- OS CodePage_ID
- 推荐个Mac OSX下的Code Editor:Atom
- 【VScode】VScode 浏览器预览HTML (windows+ubuntu+OS X平台)