1、WIFI(打开,关闭,使能,扫描等)

2、蓝牙(打开关闭)

3、电池(获取电池的各种参数和状态信息)

4、背光(背光调节)

5、U盘/SDcard(判断是否插入,读取等)

6、屏幕校准(准确的说是点击屏幕的准确度,不是校准屏幕,这是一个简单的算法,这里只提供思路了:屏幕上放5个Button,分别位于左上;左下;右上;右下;获取图片所在屏幕的位置,和图片的长宽,在用户点击Button时获取点击的坐标位置,进行判断。这种方式可能不正确,希望看到这篇文章的各位前辈大哥指点)

7、振动马达(简单的调用振动马达的服务)

8、摄像头(简单的预览图像)

9、按键(获取用户点击的按键,包括Home按键)

10、音乐(使用MediaPlayer调用音频文件播放)

11、MIC(获得当前录音的振幅和录制音频文件)

12、重力感应(通过监听方式获取X、Y、Z三点坐标的值)

以上是对本文提到的几个基本功能的简单介绍,如果你看到此处说明很期待下文。哈哈,且看一下代码!记住这里只是一些基本功能的使用,至于要实现其他的效果,还是要看自己好好研究了。一般看看API和提供的DEMO都能解决的。

1、WIFI

[java] view plaincopy
  1. package cn.tch;
  2. import java.util.List;
  3. import android.content.Context;
  4. import android.net.wifi.ScanResult;
  5. import android.net.wifi.WifiConfiguration;
  6. import android.net.wifi.WifiInfo;
  7. import android.net.wifi.WifiManager;
  8. import android.net.wifi.WifiManager.WifiLock;
  9. public class WifiHelper {
  10. // 定义WifiManager对象
  11. private WifiManager mWifiManager;
  12. // 定义WifiInfo对象
  13. private WifiInfo mWifiInfo;
  14. // 扫描出的网络连接列表
  15. private List<ScanResult> mWifiList;
  16. // 网络连接列表
  17. private List<WifiConfiguration> mWifiConfiguration;
  18. // 定义一个WifiLock
  19. WifiLock mWifiLock;
  20. // 构造器
  21. public WifiHelper(Context context) {
  22. // 取得WifiManager对象
  23. mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
  24. // 取得WifiInfo对象
  25. mWifiInfo = mWifiManager.getConnectionInfo();
  26. }
  27. public WifiManager getWifiManager(){
  28. return mWifiManager;
  29. }
  30. // 打开WIFI
  31. public boolean openWifi() {
  32. boolean flag = false;
  33. if (!mWifiManager.isWifiEnabled()) {
  34. flag =  mWifiManager.setWifiEnabled(true);
  35. }else if(mWifiManager.isWifiEnabled()){
  36. flag = true;
  37. }
  38. return flag;
  39. }
  40. // 关闭WIFI
  41. public void closeWifi() {
  42. if (!mWifiManager.isWifiEnabled()) {
  43. mWifiManager.setWifiEnabled(false);
  44. }
  45. }
  46. // 锁定WifiLock
  47. public void acquireWifiLock() {
  48. mWifiLock.acquire();
  49. }
  50. // 解锁WifiLock
  51. public void releaseWifiLock() {
  52. // 判断时候锁定
  53. if (mWifiLock.isHeld()) {
  54. mWifiLock.acquire();
  55. }
  56. }
  57. // 创建一个WifiLock
  58. public void creatWifiLock() {
  59. mWifiLock = mWifiManager.createWifiLock("Test");
  60. }
  61. // 得到配置好的网络
  62. public List<WifiConfiguration> getConfiguration() {
  63. return mWifiConfiguration;
  64. }
  65. // 指定配置好的网络进行连接
  66. public void connectConfiguration(int index) {
  67. // 索引大于配置好的网络索引返回
  68. if (index > mWifiConfiguration.size()) {
  69. return;
  70. }
  71. // 连接配置好的指定ID的网络
  72. mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,true);
  73. }
  74. public void startScan() {
  75. mWifiManager.startScan();
  76. // 得到扫描结果
  77. mWifiList = mWifiManager.getScanResults();
  78. // 得到配置好的网络连接
  79. mWifiConfiguration = mWifiManager.getConfiguredNetworks();
  80. }
  81. // 得到网络列表
  82. public List<ScanResult> getWifiList() {
  83. mWifiManager.startScan();
  84. // 得到扫描结果
  85. return mWifiManager.getScanResults();
  86. }
  87. // 查看扫描结果
  88. public StringBuilder lookUpScan(List<ScanResult> list) {
  89. StringBuilder stringBuilder = new StringBuilder();
  90. for (int i = 0; i < list.size(); i++) {
  91. stringBuilder
  92. .append("\n    结果" + new Integer(i + 1).toString() + " (");
  93. // 将ScanResult信息转换成一个字符串包
  94. // 其中把包括:BSSID、SSID、capabilities、frequency、level
  95. stringBuilder.append((list.get(i)).toString());
  96. stringBuilder.append(")\n");
  97. }
  98. return stringBuilder;
  99. }
  100. // 得到MAC地址
  101. public String getMacAddress() {
  102. return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
  103. }
  104. // 得到接入点的BSSID
  105. public String getBSSID() {
  106. return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
  107. }
  108. // 得到IP地址
  109. public int getIPAddress() {
  110. return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
  111. }
  112. // 得到连接的ID
  113. public int getNetworkId() {
  114. return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
  115. }
  116. // 得到WifiInfo的所有信息包
  117. public String getWifiInfo() {
  118. return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
  119. }
  120. // 添加一个网络并连接
  121. public void addNetwork(WifiConfiguration wcg) {
  122. int wcgID = mWifiManager.addNetwork(wcg);
  123. mWifiManager.enableNetwork(wcgID, true);
  124. }
  125. // 断开指定ID的网络
  126. public void disconnectWifi(int netId) {
  127. mWifiManager.disableNetwork(netId);
  128. mWifiManager.disconnect();
  129. }
  130. }
[java] view plain copy
  1. package cn.tch;
  2. import java.util.List;
  3. import android.content.Context;
  4. import android.net.wifi.ScanResult;
  5. import android.net.wifi.WifiConfiguration;
  6. import android.net.wifi.WifiInfo;
  7. import android.net.wifi.WifiManager;
  8. import android.net.wifi.WifiManager.WifiLock;
  9. public class WifiHelper {
  10. // 定义WifiManager对象
  11. private WifiManager mWifiManager;
  12. // 定义WifiInfo对象
  13. private WifiInfo mWifiInfo;
  14. // 扫描出的网络连接列表
  15. private List<ScanResult> mWifiList;
  16. // 网络连接列表
  17. private List<WifiConfiguration> mWifiConfiguration;
  18. // 定义一个WifiLock
  19. WifiLock mWifiLock;
  20. // 构造器
  21. public WifiHelper(Context context) {
  22. // 取得WifiManager对象
  23. mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
  24. // 取得WifiInfo对象
  25. mWifiInfo = mWifiManager.getConnectionInfo();
  26. }
  27. public WifiManager getWifiManager(){
  28. return mWifiManager;
  29. }
  30. // 打开WIFI
  31. public boolean openWifi() {
  32. boolean flag = false;
  33. if (!mWifiManager.isWifiEnabled()) {
  34. flag =  mWifiManager.setWifiEnabled(true);
  35. }else if(mWifiManager.isWifiEnabled()){
  36. flag = true;
  37. }
  38. return flag;
  39. }
  40. // 关闭WIFI
  41. public void closeWifi() {
  42. if (!mWifiManager.isWifiEnabled()) {
  43. mWifiManager.setWifiEnabled(false);
  44. }
  45. }
  46. // 锁定WifiLock
  47. public void acquireWifiLock() {
  48. mWifiLock.acquire();
  49. }
  50. // 解锁WifiLock
  51. public void releaseWifiLock() {
  52. // 判断时候锁定
  53. if (mWifiLock.isHeld()) {
  54. mWifiLock.acquire();
  55. }
  56. }
  57. // 创建一个WifiLock
  58. public void creatWifiLock() {
  59. mWifiLock = mWifiManager.createWifiLock("Test");
  60. }
  61. // 得到配置好的网络
  62. public List<WifiConfiguration> getConfiguration() {
  63. return mWifiConfiguration;
  64. }
  65. // 指定配置好的网络进行连接
  66. public void connectConfiguration(int index) {
  67. // 索引大于配置好的网络索引返回
  68. if (index > mWifiConfiguration.size()) {
  69. return;
  70. }
  71. // 连接配置好的指定ID的网络
  72. mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,true);
  73. }
  74. public void startScan() {
  75. mWifiManager.startScan();
  76. // 得到扫描结果
  77. mWifiList = mWifiManager.getScanResults();
  78. // 得到配置好的网络连接
  79. mWifiConfiguration = mWifiManager.getConfiguredNetworks();
  80. }
  81. // 得到网络列表
  82. public List<ScanResult> getWifiList() {
  83. mWifiManager.startScan();
  84. // 得到扫描结果
  85. return mWifiManager.getScanResults();
  86. }
  87. // 查看扫描结果
  88. public StringBuilder lookUpScan(List<ScanResult> list) {
  89. StringBuilder stringBuilder = new StringBuilder();
  90. for (int i = 0; i < list.size(); i++) {
  91. stringBuilder
  92. .append("\n    结果" + new Integer(i + 1).toString() + " (");
  93. // 将ScanResult信息转换成一个字符串包
  94. // 其中把包括:BSSID、SSID、capabilities、frequency、level
  95. stringBuilder.append((list.get(i)).toString());
  96. stringBuilder.append(")\n");
  97. }
  98. return stringBuilder;
  99. }
  100. // 得到MAC地址
  101. public String getMacAddress() {
  102. return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
  103. }
  104. // 得到接入点的BSSID
  105. public String getBSSID() {
  106. return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
  107. }
  108. // 得到IP地址
  109. public int getIPAddress() {
  110. return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
  111. }
  112. // 得到连接的ID
  113. public int getNetworkId() {
  114. return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
  115. }
  116. // 得到WifiInfo的所有信息包
  117. public String getWifiInfo() {
  118. return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
  119. }
  120. // 添加一个网络并连接
  121. public void addNetwork(WifiConfiguration wcg) {
  122. int wcgID = mWifiManager.addNetwork(wcg);
  123. mWifiManager.enableNetwork(wcgID, true);
  124. }
  125. // 断开指定ID的网络
  126. public void disconnectWifi(int netId) {
  127. mWifiManager.disableNetwork(netId);
  128. mWifiManager.disconnect();
  129. }
  130. }

2、蓝牙

[java] view plaincopy
  1. boolean flag = false;
  2. lt;pre class="java" name="code">        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
[java] view plain copy
  1. boolean flag = false;
  2. lt;pre class="java" name="code">        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

if (bluetoothAdapter.isEnabled()) { bluetoothAdapter.disable(); flag = bluetoothAdapter.enable(); } else { flag = bluetoothAdapter.enable(); }

3、电池

1、新建一个广播接收类

[java] view plaincopy
  1. package cn.tch;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.res.Resources;
  6. import android.os.BatteryManager;
  7. import android.util.Log;
  8. import java.util.ArrayList;
  9. public class BatteryBroadcastReceiver extends BroadcastReceiver {
  10. private String action;
  11. private int status;
  12. private int health;
  13. private int plugged;
  14. private String statusString;
  15. private String healthString;
  16. private String acString;
  17. private Resources mResources;
  18. private StringBuffer buffer = new StringBuffer();
  19. private static int count = 0;
  20. private ArrayList<String> batteryMsg;
  21. int level;// 电池电量,数字
  22. int scale;// 电池最大容量
  23. int voltage;// 电池伏数
  24. int temperature;// 电池温度
  25. public BatteryBroadcastReceiver(Resources res) {
  26. mResources = res;
  27. batteryMsg  = new ArrayList<String>();
  28. }
  29. @Override
  30. public void onReceive(Context context, Intent intent) {
  31. action = intent.getAction();
  32. status = intent.getIntExtra("status", 0);
  33. health = intent.getIntExtra("health", 0);
  34. plugged = intent.getIntExtra("plugged", 0);
  35. switch (status) {
  36. case BatteryManager.BATTERY_STATUS_UNKNOWN:
  37. statusString = "unknown";
  38. break;
  39. case BatteryManager.BATTERY_STATUS_CHARGING:
  40. statusString = "charging";
  41. break;
  42. case BatteryManager.BATTERY_STATUS_DISCHARGING:
  43. statusString = "discharging";
  44. break;
  45. case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
  46. statusString = "not charging";
  47. break;
  48. case BatteryManager.BATTERY_STATUS_FULL:
  49. statusString = "full";
  50. break;
  51. }
  52. switch (health) {
  53. case BatteryManager.BATTERY_HEALTH_UNKNOWN:
  54. healthString = "unknown";
  55. break;
  56. case BatteryManager.BATTERY_HEALTH_GOOD:
  57. healthString = "good";
  58. break;
  59. case BatteryManager.BATTERY_HEALTH_OVERHEAT:
  60. healthString = "overheat";
  61. break;
  62. case BatteryManager.BATTERY_HEALTH_DEAD:
  63. healthString = "dead";
  64. break;
  65. case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
  66. healthString = "voltage";
  67. break;
  68. case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
  69. healthString = "unspecified failure";
  70. break;
  71. }
  72. switch (plugged) {
  73. case BatteryManager.BATTERY_PLUGGED_AC:
  74. acString = "plugged ac";
  75. break;
  76. case BatteryManager.BATTERY_PLUGGED_USB:
  77. acString = "plugged usb";
  78. break;
  79. }
  80. //        if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
  81. //            for (int i = count; i < 10; i++) {
  82. //                level = intent.getIntExtra("level", 0);// 电池电量,数字
  83. //                scale = intent.getIntExtra("scale", 0);// 电池最大容量
  84. //                voltage = intent.getIntExtra("voltage", 0);// 电池伏数
  85. //                temperature = intent.getIntExtra("temperature", 0);// 电池温度
  86. //                String msg = String.format(res.getString(R.string.battery_chenged_msg), level, scale, voltage,
  87. //                        temperature, statusString, acString, healthString);
  88. //                batteryMsg.add(msg);
  89. //                count++;
  90. //            }
  91. //        }
  92. }
  93. // 电池状态,返回是一个数字
  94. // BatteryManager.BATTERY_STATUS_CHARGING 表示是充电状态
  95. // BatteryManager.BATTERY_STATUS_DISCHARGING 放电中
  96. // BatteryManager.BATTERY_STATUS_NOT_CHARGING 未充电
  97. // BatteryManager.BATTERY_STATUS_FULL 电池满
  98. // 充电类型 BatteryManager.BATTERY_PLUGGED_AC 表示是充电器,不是这个值,表示是 USB
  99. // 电池健康情况,返回也是一个数字
  100. // BatteryManager.BATTERY_HEALTH_GOOD 良好
  101. // BatteryManager.BATTERY_HEALTH_OVERHEAT 过热
  102. // BatteryManager.BATTERY_HEALTH_DEAD 没电
  103. // BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE 过电压
  104. // BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE 未知错误
  105. }
[java] view plain copy
  1. package cn.tch;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.res.Resources;
  6. import android.os.BatteryManager;
  7. import android.util.Log;
  8. import java.util.ArrayList;
  9. public class BatteryBroadcastReceiver extends BroadcastReceiver {
  10. private String action;
  11. private int status;
  12. private int health;
  13. private int plugged;
  14. private String statusString;
  15. private String healthString;
  16. private String acString;
  17. private Resources mResources;
  18. private StringBuffer buffer = new StringBuffer();
  19. private static int count = 0;
  20. private ArrayList<String> batteryMsg;
  21. int level;// 电池电量,数字
  22. int scale;// 电池最大容量
  23. int voltage;// 电池伏数
  24. int temperature;// 电池温度
  25. public BatteryBroadcastReceiver(Resources res) {
  26. mResources = res;
  27. batteryMsg  = new ArrayList<String>();
  28. }
  29. @Override
  30. public void onReceive(Context context, Intent intent) {
  31. action = intent.getAction();
  32. status = intent.getIntExtra("status", 0);
  33. health = intent.getIntExtra("health", 0);
  34. plugged = intent.getIntExtra("plugged", 0);
  35. switch (status) {
  36. case BatteryManager.BATTERY_STATUS_UNKNOWN:
  37. statusString = "unknown";
  38. break;
  39. case BatteryManager.BATTERY_STATUS_CHARGING:
  40. statusString = "charging";
  41. break;
  42. case BatteryManager.BATTERY_STATUS_DISCHARGING:
  43. statusString = "discharging";
  44. break;
  45. case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
  46. statusString = "not charging";
  47. break;
  48. case BatteryManager.BATTERY_STATUS_FULL:
  49. statusString = "full";
  50. break;
  51. }
  52. switch (health) {
  53. case BatteryManager.BATTERY_HEALTH_UNKNOWN:
  54. healthString = "unknown";
  55. break;
  56. case BatteryManager.BATTERY_HEALTH_GOOD:
  57. healthString = "good";
  58. break;
  59. case BatteryManager.BATTERY_HEALTH_OVERHEAT:
  60. healthString = "overheat";
  61. break;
  62. case BatteryManager.BATTERY_HEALTH_DEAD:
  63. healthString = "dead";
  64. break;
  65. case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
  66. healthString = "voltage";
  67. break;
  68. case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
  69. healthString = "unspecified failure";
  70. break;
  71. }
  72. switch (plugged) {
  73. case BatteryManager.BATTERY_PLUGGED_AC:
  74. acString = "plugged ac";
  75. break;
  76. case BatteryManager.BATTERY_PLUGGED_USB:
  77. acString = "plugged usb";
  78. break;
  79. }
  80. //        if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
  81. //            for (int i = count; i < 10; i++) {
  82. //                level = intent.getIntExtra("level", 0);// 电池电量,数字
  83. //                scale = intent.getIntExtra("scale", 0);// 电池最大容量
  84. //                voltage = intent.getIntExtra("voltage", 0);// 电池伏数
  85. //                temperature = intent.getIntExtra("temperature", 0);// 电池温度
  86. //                String msg = String.format(res.getString(R.string.battery_chenged_msg), level, scale, voltage,
  87. //                        temperature, statusString, acString, healthString);
  88. //                batteryMsg.add(msg);
  89. //                count++;
  90. //            }
  91. //        }
  92. }
  93. // 电池状态,返回是一个数字
  94. // BatteryManager.BATTERY_STATUS_CHARGING 表示是充电状态
  95. // BatteryManager.BATTERY_STATUS_DISCHARGING 放电中
  96. // BatteryManager.BATTERY_STATUS_NOT_CHARGING 未充电
  97. // BatteryManager.BATTERY_STATUS_FULL 电池满
  98. // 充电类型 BatteryManager.BATTERY_PLUGGED_AC 表示是充电器,不是这个值,表示是 USB
  99. // 电池健康情况,返回也是一个数字
  100. // BatteryManager.BATTERY_HEALTH_GOOD 良好
  101. // BatteryManager.BATTERY_HEALTH_OVERHEAT 过热
  102. // BatteryManager.BATTERY_HEALTH_DEAD 没电
  103. // BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE 过电压
  104. // BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE 未知错误
  105. }

2、注册广播

[java] view plaincopy
  1. IntentFilter intentFilter = new IntentFilter();
  2. intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
  3. registerReceiver(batteryReceiver, intentFilter);
[java] view plain copy
  1. IntentFilter intentFilter = new IntentFilter();
  2. intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
  3. registerReceiver(batteryReceiver, intentFilter);

4、背光

[java] view plaincopy
  1. package cn.tch;
  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.content.DialogInterface;
  5. import android.content.Intent;
  6. import android.content.res.Resources;
  7. import android.os.Bundle;
  8. import android.os.Handler;
  9. import android.os.Message;
  10. import android.os.RemoteException;
  11. import android.provider.Settings;
  12. import android.provider.Settings.SettingNotFoundException;
  13. import android.util.Log;
  14. import android.view.View;
  15. import android.view.View.OnClickListener;
  16. import android.widget.Button;
  17. import android.widget.ProgressBar;
  18. import android.widget.SeekBar;
  19. import android.widget.SeekBar.OnSeekBarChangeListener;
  20. import android.os.IPowerManager;
  21. import android.os.ServiceManager;
  22. import static cn.tch.Constant.*;
  23. public class BacklightActivity extends Activity implements OnSeekBarChangeListener{
  24. private final static String TAG = "BacklightActivity";
  25. private SeekBar seekBar;
  26. private Button btnFinish;
  27. private Resources res;
  28. private int mOldBrightness = 0;
  29. private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 10;
  30. private static final int MAXIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_ON;
  31. private boolean isRun = true;
  32. @Override
  33. protected void onCreate(Bundle savedInstanceState) {
  34. super.onCreate(savedInstanceState);
  35. setContentView(R.layout.backlight);
  36. res = getResources();
  37. seekBar = (SeekBar) findViewById(R.id.bl_seekbar);
  38. btnFinish = (Button) findViewById(R.id.bl_finish);
  39. initBrightness();
  40. seekBar.setOnSeekBarChangeListener(this);
  41. btnFinish.setOnClickListener(new OnClickListener() {
  42. //@Override
  43. public void onClick(View v) {
  44. new AlertDialog.Builder(BacklightActivity.this).setIcon(
  45. R.drawable.icon).setTitle(res.getString(R.string.backlight_title))
  46. .setMessage(res.getString(R.string.backlight_msg)).setPositiveButton(
  47. res.getString(R.string.yes), dialogClick)
  48. .setNegativeButton(res.getString(R.string.no), dialogClick).create().show();
  49. }
  50. });
  51. }
  52. private android.content.DialogInterface.OnClickListener dialogClick = new android.content.DialogInterface.OnClickListener() {
  53. //@Override
  54. public void onClick(DialogInterface dialog, int which) {
  55. switch (which) {
  56. case DialogInterface.BUTTON_POSITIVE:
  57. resultRquest(true);
  58. break;
  59. case DialogInterface.BUTTON_NEGATIVE:
  60. resultRquest(false);
  61. break;
  62. default:
  63. break;
  64. }
  65. }
  66. };
  67. private void resultRquest(boolean flag){
  68. Intent intent = new Intent(this, MainActivity.class);
  69. intent.putExtra(BACKLIGHT_RESULT,flag);
  70. setResult(REQUESTCODE_BACKLIGHT_RESULT, intent);
  71. finish();
  72. }
  73. //@Override
  74. public void onProgressChanged(SeekBar seekBar, int progress,
  75. boolean fromUser) {
  76. int step = 25;
  77. Settings.System.putInt(BacklightActivity.this.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, progress + MINIMUM_BACKLIGHT);
  78. setBrightness(progress + MINIMUM_BACKLIGHT);
  79. }
  80. private void initBrightness(){
  81. // 获取当前背光亮度
  82. try {
  83. mOldBrightness = Settings.System.getInt(BacklightActivity.this.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
  84. } catch (SettingNotFoundException e) {
  85. mOldBrightness = MAXIMUM_BACKLIGHT;
  86. }
  87. seekBar.setMax(MAXIMUM_BACKLIGHT - MINIMUM_BACKLIGHT);
  88. Log.v("Brightness max", "setmax:" + (MAXIMUM_BACKLIGHT - MINIMUM_BACKLIGHT));
  89. //seekBar.setProgress(mOldBrightness - MINIMUM_BACKLIGHT);
  90. seekBar.setProgress(0);
  91. new Thread(new Runnable() {
  92. int value = 0;
  93. public void run() {
  94. while (isRun) {
  95. try {
  96. Thread.sleep(150);
  97. value = value+5;
  98. Message message = new Message();
  99. message.what = value;
  100. handler.sendEmptyMessage(message.what);
  101. } catch (InterruptedException e) {
  102. }
  103. }
  104. }
  105. }).start();
  106. }
  107. private Handler handler = new Handler(){
  108. public void handleMessage(android.os.Message msg) {
  109. if(msg.what<=MAXIMUM_BACKLIGHT){
  110. seekBar.setProgress(msg.what);
  111. //              Settings.System.putInt(BacklightActivity.this.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, msg.what + MINIMUM_BACKLIGHT);
  112. setBrightness(msg.what);
  113. }else{
  114. isRun = false;
  115. }
  116. };
  117. };
  118. private void setBrightness(int brightness) {
  119. try {
  120. IPowerManager power = IPowerManager.Stub.asInterface(ServiceManager.getService("power"));
  121. if (power != null) {
  122. power.setBacklightBrightness(brightness);
  123. }
  124. } catch (RemoteException doe) {
  125. Log.e(TAG,"Setting Brightness RemoteException!");
  126. }
  127. }
  128. //@Override
  129. public void onStartTrackingTouch(SeekBar seekBar) {}
  130. //@Override
  131. public void onStopTrackingTouch(SeekBar seekBar) {}
  132. }
[java] view plain copy
  1. package cn.tch;
  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.content.DialogInterface;
  5. import android.content.Intent;
  6. import android.content.res.Resources;
  7. import android.os.Bundle;
  8. import android.os.Handler;
  9. import android.os.Message;
  10. import android.os.RemoteException;
  11. import android.provider.Settings;
  12. import android.provider.Settings.SettingNotFoundException;
  13. import android.util.Log;
  14. import android.view.View;
  15. import android.view.View.OnClickListener;
  16. import android.widget.Button;
  17. import android.widget.ProgressBar;
  18. import android.widget.SeekBar;
  19. import android.widget.SeekBar.OnSeekBarChangeListener;
  20. import android.os.IPowerManager;
  21. import android.os.ServiceManager;
  22. import static cn.tch.Constant.*;
  23. public class BacklightActivity extends Activity implements OnSeekBarChangeListener{
  24. private final static String TAG = "BacklightActivity";
  25. private SeekBar seekBar;
  26. private Button btnFinish;
  27. private Resources res;
  28. private int mOldBrightness = 0;
  29. private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 10;
  30. private static final int MAXIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_ON;
  31. private boolean isRun = true;
  32. @Override
  33. protected void onCreate(Bundle savedInstanceState) {
  34. super.onCreate(savedInstanceState);
  35. setContentView(R.layout.backlight);
  36. res = getResources();
  37. seekBar = (SeekBar) findViewById(R.id.bl_seekbar);
  38. btnFinish = (Button) findViewById(R.id.bl_finish);
  39. initBrightness();
  40. seekBar.setOnSeekBarChangeListener(this);
  41. btnFinish.setOnClickListener(new OnClickListener() {
  42. //@Override
  43. public void onClick(View v) {
  44. new AlertDialog.Builder(BacklightActivity.this).setIcon(
  45. R.drawable.icon).setTitle(res.getString(R.string.backlight_title))
  46. .setMessage(res.getString(R.string.backlight_msg)).setPositiveButton(
  47. res.getString(R.string.yes), dialogClick)
  48. .setNegativeButton(res.getString(R.string.no), dialogClick).create().show();
  49. }
  50. });
  51. }
  52. private android.content.DialogInterface.OnClickListener dialogClick = new android.content.DialogInterface.OnClickListener() {
  53. //@Override
  54. public void onClick(DialogInterface dialog, int which) {
  55. switch (which) {
  56. case DialogInterface.BUTTON_POSITIVE:
  57. resultRquest(true);
  58. break;
  59. case DialogInterface.BUTTON_NEGATIVE:
  60. resultRquest(false);
  61. break;
  62. default:
  63. break;
  64. }
  65. }
  66. };
  67. private void resultRquest(boolean flag){
  68. Intent intent = new Intent(this, MainActivity.class);
  69. intent.putExtra(BACKLIGHT_RESULT,flag);
  70. setResult(REQUESTCODE_BACKLIGHT_RESULT, intent);
  71. finish();
  72. }
  73. //@Override
  74. public void onProgressChanged(SeekBar seekBar, int progress,
  75. boolean fromUser) {
  76. int step = 25;
  77. Settings.System.putInt(BacklightActivity.this.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, progress + MINIMUM_BACKLIGHT);
  78. setBrightness(progress + MINIMUM_BACKLIGHT);
  79. }
  80. private void initBrightness(){
  81. // 获取当前背光亮度
  82. try {
  83. mOldBrightness = Settings.System.getInt(BacklightActivity.this.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
  84. } catch (SettingNotFoundException e) {
  85. mOldBrightness = MAXIMUM_BACKLIGHT;
  86. }
  87. seekBar.setMax(MAXIMUM_BACKLIGHT - MINIMUM_BACKLIGHT);
  88. Log.v("Brightness max", "setmax:" + (MAXIMUM_BACKLIGHT - MINIMUM_BACKLIGHT));
  89. //seekBar.setProgress(mOldBrightness - MINIMUM_BACKLIGHT);
  90. seekBar.setProgress(0);
  91. new Thread(new Runnable() {
  92. int value = 0;
  93. public void run() {
  94. while (isRun) {
  95. try {
  96. Thread.sleep(150);
  97. value = value+5;
  98. Message message = new Message();
  99. message.what = value;
  100. handler.sendEmptyMessage(message.what);
  101. } catch (InterruptedException e) {
  102. }
  103. }
  104. }
  105. }).start();
  106. }
  107. private Handler handler = new Handler(){
  108. public void handleMessage(android.os.Message msg) {
  109. if(msg.what<=MAXIMUM_BACKLIGHT){
  110. seekBar.setProgress(msg.what);
  111. //              Settings.System.putInt(BacklightActivity.this.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, msg.what + MINIMUM_BACKLIGHT);
  112. setBrightness(msg.what);
  113. }else{
  114. isRun = false;
  115. }
  116. };
  117. };
  118. private void setBrightness(int brightness) {
  119. try {
  120. IPowerManager power = IPowerManager.Stub.asInterface(ServiceManager.getService("power"));
  121. if (power != null) {
  122. power.setBacklightBrightness(brightness);
  123. }
  124. } catch (RemoteException doe) {
  125. Log.e(TAG,"Setting Brightness RemoteException!");
  126. }
  127. }
  128. //@Override
  129. public void onStartTrackingTouch(SeekBar seekBar) {}
  130. //@Override
  131. public void onStopTrackingTouch(SeekBar seekBar) {}
  132. }

5、判断SDcard和获取SDCard的路径

[java] view plaincopy
  1. static String getSdcardPath(){
  2. return Environment.getExternalStorageDirectory().getPath();
  3. }
  4. static boolean checkSdcard(){
  5. boolean flag = false;
  6. if(Environment.getExternalStorageDirectory().toString().equals("/mnt/sdcard")){
  7. flag = true;
  8. }
  9. return flag;
  10. }
[java] view plain copy
  1. static String getSdcardPath(){
  2. return Environment.getExternalStorageDirectory().getPath();
  3. }
  4. static boolean checkSdcard(){
  5. boolean flag = false;
  6. if(Environment.getExternalStorageDirectory().toString().equals("/mnt/sdcard")){
  7. flag = true;
  8. }
  9. return flag;
  10. }

6、屏幕校准(请参看前面说明)

7、振动马达

[java] view plaincopy
  1. vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
  2. long[] pattern = {
  3. 800, 50, 400, 30
  4. }; // OFF/ON/OFF/ON...
  5. vibrator.vibrate(pattern, 2);
[java] view plain copy
  1. vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
  2. long[] pattern = {
  3. 800, 50, 400, 30
  4. }; // OFF/ON/OFF/ON...
  5. vibrator.vibrate(pattern, 2);

8、摄像头(拍照和预览)

[java] view plaincopy
  1. public class CameraActivity extends Activity{
  2. /**
  3. * 第一种方式实现拍照
  4. */
  5. // private PreView preView = null;
  6. //
  7. // @Override
  8. // protected void onCreate(Bundle savedInstanceState) {
  9. // super.onCreate(savedInstanceState);
  10. // this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  11. // preView = new PreView(this);
  12. // setContentView(preView,new LayoutParams(400, 300));
  13. // }
  14. //
  15. // @Override
  16. // public boolean onKeyDown(int keyCode, KeyEvent event) {
  17. // return preView.onKeyDown(keyCode, event);
  18. // }
  19. private final static String TAG = "CameraActivity";
  20. private SurfaceView surfaceView;
  21. private SurfaceHolder surfaceHolder;
  22. private Camera camera;
  23. private File picture;
  24. private Button btnFinish;
  25. private Dialog mDialog;
  26. private Resources res;
  27. @Override
  28. public void onCreate(Bundle savedInstanceState) {
  29. super.onCreate(savedInstanceState);
  30. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  31. setContentView(R.layout.camera);
  32. setupViews();
  33. }
  34. private void setupViews(){
  35. surfaceView = (SurfaceView) findViewById(R.id.camera_preview); // 实例化拍照界面组件
  36. surfaceHolder = surfaceView.getHolder(); // 实例化拍照界面组件
  37. surfaceHolder.addCallback(surfaceCallback); // 为SurfaceHolder 添加回调
  38. surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  39. res = getResources();
  40. btnFinish =(Button) findViewById(R.id.camera_finish);
  41. btnFinish.setOnClickListener(new OnClickListener() {
  42. //@Override
  43. public void onClick(View v) {
  44. // 提示是否看到预览
  45. if(mDialog == null){
  46. mDialog = new AlertDialog.Builder(CameraActivity.this).setIcon(
  47. R.drawable.icon).setTitle(res.getString(R.string.camera_title))
  48. .setMessage(res.getString(R.string.camera_msg)).setPositiveButton(
  49. res.getString(R.string.yes), dialogClick)
  50. .setNegativeButton(res.getString(R.string.no), dialogClick).create();
  51. mDialog.show();}
  52. }
  53. });
  54. }
  55. private android.content.DialogInterface.OnClickListener dialogClick = new android.content.DialogInterface.OnClickListener() {
  56. //        @Override
  57. public void onClick(DialogInterface dialog, int which) {
  58. switch (which) {
  59. case DialogInterface.BUTTON_POSITIVE:
  60. resultRquest(true);
  61. break;
  62. case DialogInterface.BUTTON_NEGATIVE:
  63. resultRquest(false);
  64. break;
  65. default:
  66. break;
  67. }
  68. }
  69. };
  70. private void resultRquest(boolean flag){
  71. Intent intent = new Intent(CameraActivity.this, MainActivity.class);
  72. intent.putExtra(CAMERA_RESULT, flag);
  73. setResult(REQUESTCODE_CAMERA_RESULT, intent);
  74. finish();
  75. }
  76. @Override
  77. public boolean onKeyDown(int keyCode, KeyEvent event) {
  78. if (keyCode == KeyEvent.KEYCODE_CAMERA
  79. || keyCode == KeyEvent.KEYCODE_SEARCH) {
  80. takePic();
  81. return true;
  82. }
  83. return super.onKeyDown(keyCode, event);
  84. }
  85. private void takePic() {
  86. camera.stopPreview();// 停止预览
  87. camera.takePicture(null, null, pictureCallback); // 拍照
  88. }
  89. // 照片回调
  90. Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
  91. //@Override
  92. public void onPictureTaken(byte[] data, Camera camera) {
  93. new SavePictureTask().execute(data);
  94. camera.startPreview();
  95. }
  96. };
  97. // 保存照片任务类
  98. class SavePictureTask extends AsyncTask<byte[], String, String> {
  99. @Override
  100. protected String doInBackground(byte[]... params) {
  101. picture = new File(Environment.getExternalStorageDirectory(),
  102. "picture.jpg");// 创建文件
  103. if (picture.exists())
  104. picture.delete(); // 如果文件存在删除掉
  105. try {
  106. FileOutputStream fos = new FileOutputStream(picture.getPath()); // 获得文件输出流
  107. fos.write(params[0]); // 写到该文件
  108. fos.close(); // 关闭文件流
  109. } catch (Exception e) {
  110. e.printStackTrace();
  111. }
  112. return null;
  113. }
  114. }
  115. // SurfaceHodler 回调,处理打开相机,关闭相机以及照片尺寸的改变
  116. SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
  117. //@Override
  118. public void surfaceCreated(SurfaceHolder holder) {
  119. camera = Camera.open(); // 打开相机
  120. try {
  121. camera.setPreviewDisplay(holder); // 设置预览
  122. } catch (IOException e) {
  123. camera.release();// 释放
  124. camera = null;
  125. }
  126. }
  127. //@Override
  128. public void surfaceChanged(SurfaceHolder holder, int format, int width,
  129. int height) {
  130. Camera.Parameters parameters = camera.getParameters(); // 获得相机参数
  131. parameters.setPictureFormat(PixelFormat.JPEG);// 设置照片格式
  132. parameters.setPreviewSize(400, 300); // 设置照片大小
  133. camera.setParameters(parameters); // 设置相机参数
  134. camera.startPreview(); // 开始预览
  135. }
  136. //@Override
  137. public void surfaceDestroyed(SurfaceHolder holder) {
  138. Log.i(TAG,"====surfaceDestroyed");
  139. camera.stopPreview();// 停止预览
  140. camera.release(); // 释放相机资源
  141. camera = null;
  142. }
  143. };
  144. }
[java] view plain copy
  1. public class CameraActivity extends Activity{
  2. /**
  3. * 第一种方式实现拍照
  4. */
  5. // private PreView preView = null;
  6. //
  7. // @Override
  8. // protected void onCreate(Bundle savedInstanceState) {
  9. // super.onCreate(savedInstanceState);
  10. // this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  11. // preView = new PreView(this);
  12. // setContentView(preView,new LayoutParams(400, 300));
  13. // }
  14. //
  15. // @Override
  16. // public boolean onKeyDown(int keyCode, KeyEvent event) {
  17. // return preView.onKeyDown(keyCode, event);
  18. // }
  19. private final static String TAG = "CameraActivity";
  20. private SurfaceView surfaceView;
  21. private SurfaceHolder surfaceHolder;
  22. private Camera camera;
  23. private File picture;
  24. private Button btnFinish;
  25. private Dialog mDialog;
  26. private Resources res;
  27. @Override
  28. public void onCreate(Bundle savedInstanceState) {
  29. super.onCreate(savedInstanceState);
  30. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  31. setContentView(R.layout.camera);
  32. setupViews();
  33. }
  34. private void setupViews(){
  35. surfaceView = (SurfaceView) findViewById(R.id.camera_preview); // 实例化拍照界面组件
  36. surfaceHolder = surfaceView.getHolder(); // 实例化拍照界面组件
  37. surfaceHolder.addCallback(surfaceCallback); // 为SurfaceHolder 添加回调
  38. surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  39. res = getResources();
  40. btnFinish =(Button) findViewById(R.id.camera_finish);
  41. btnFinish.setOnClickListener(new OnClickListener() {
  42. //@Override
  43. public void onClick(View v) {
  44. // 提示是否看到预览
  45. if(mDialog == null){
  46. mDialog = new AlertDialog.Builder(CameraActivity.this).setIcon(
  47. R.drawable.icon).setTitle(res.getString(R.string.camera_title))
  48. .setMessage(res.getString(R.string.camera_msg)).setPositiveButton(
  49. res.getString(R.string.yes), dialogClick)
  50. .setNegativeButton(res.getString(R.string.no), dialogClick).create();
  51. mDialog.show();}
  52. }
  53. });
  54. }
  55. private android.content.DialogInterface.OnClickListener dialogClick = new android.content.DialogInterface.OnClickListener() {
  56. //        @Override
  57. public void onClick(DialogInterface dialog, int which) {
  58. switch (which) {
  59. case DialogInterface.BUTTON_POSITIVE:
  60. resultRquest(true);
  61. break;
  62. case DialogInterface.BUTTON_NEGATIVE:
  63. resultRquest(false);
  64. break;
  65. default:
  66. break;
  67. }
  68. }
  69. };
  70. private void resultRquest(boolean flag){
  71. Intent intent = new Intent(CameraActivity.this, MainActivity.class);
  72. intent.putExtra(CAMERA_RESULT, flag);
  73. setResult(REQUESTCODE_CAMERA_RESULT, intent);
  74. finish();
  75. }
  76. @Override
  77. public boolean onKeyDown(int keyCode, KeyEvent event) {
  78. if (keyCode == KeyEvent.KEYCODE_CAMERA
  79. || keyCode == KeyEvent.KEYCODE_SEARCH) {
  80. takePic();
  81. return true;
  82. }
  83. return super.onKeyDown(keyCode, event);
  84. }
  85. private void takePic() {
  86. camera.stopPreview();// 停止预览
  87. camera.takePicture(null, null, pictureCallback); // 拍照
  88. }
  89. // 照片回调
  90. Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
  91. //@Override
  92. public void onPictureTaken(byte[] data, Camera camera) {
  93. new SavePictureTask().execute(data);
  94. camera.startPreview();
  95. }
  96. };
  97. // 保存照片任务类
  98. class SavePictureTask extends AsyncTask<byte[], String, String> {
  99. @Override
  100. protected String doInBackground(byte[]... params) {
  101. picture = new File(Environment.getExternalStorageDirectory(),
  102. "picture.jpg");// 创建文件
  103. if (picture.exists())
  104. picture.delete(); // 如果文件存在删除掉
  105. try {
  106. FileOutputStream fos = new FileOutputStream(picture.getPath()); // 获得文件输出流
  107. fos.write(params[0]); // 写到该文件
  108. fos.close(); // 关闭文件流
  109. } catch (Exception e) {
  110. e.printStackTrace();
  111. }
  112. return null;
  113. }
  114. }
  115. // SurfaceHodler 回调,处理打开相机,关闭相机以及照片尺寸的改变
  116. SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
  117. //@Override
  118. public void surfaceCreated(SurfaceHolder holder) {
  119. camera = Camera.open(); // 打开相机
  120. try {
  121. camera.setPreviewDisplay(holder); // 设置预览
  122. } catch (IOException e) {
  123. camera.release();// 释放
  124. camera = null;
  125. }
  126. }
  127. //@Override
  128. public void surfaceChanged(SurfaceHolder holder, int format, int width,
  129. int height) {
  130. Camera.Parameters parameters = camera.getParameters(); // 获得相机参数
  131. parameters.setPictureFormat(PixelFormat.JPEG);// 设置照片格式
  132. parameters.setPreviewSize(400, 300); // 设置照片大小
  133. camera.setParameters(parameters); // 设置相机参数
  134. camera.startPreview(); // 开始预览
  135. }
  136. //@Override
  137. public void surfaceDestroyed(SurfaceHolder holder) {
  138. Log.i(TAG,"====surfaceDestroyed");
  139. camera.stopPreview();// 停止预览
  140. camera.release(); // 释放相机资源
  141. camera = null;
  142. }
  143. };
  144. }

9、按键(只要重写dispoatchKeyEvent即可)

以下是屏蔽Home键的方法:
[java] view plaincopy
  1. @Override
  2. public void onAttachedToWindow() {
  3. this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
  4. super.onAttachedToWindow();
  5. }
[java] view plain copy
  1. @Override
  2. public void onAttachedToWindow() {
  3. this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
  4. super.onAttachedToWindow();
  5. }

10、音乐播放器

代码太多了,给个给力的连接吧!http://hi.baidu.com/orangejackylee/blog/item/6afb84d68e36cbd0a9ec9a36.html/cmtid/ce7e663d9938dffdb211c7d6

11、录音

[java] view plaincopy
  1. public class MicActivity extends Activity implements OnClickListener{
  2. private final static String TAG="MicActivity";
  3. private Button btnMicRecord;
  4. private Button btnMicPlay;
  5. private Button btnMicFinish;
  6. private TextView txtMicAmplitudeMsg;
  7. private TextView txtMicTimeMsg;
  8. private File recAudioFile;
  9. private MediaRecorder mMediaRecorder;
  10. private Resources res;
  11. private static int time;
  12. private static int mic_state = MIC_STATE_RECORD;
  13. private Thread threadAmplitude;
  14. private Thread threadTime;
  15. private static boolean threadRun ;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.mic);
  20. setupViews();
  21. }
  22. @Override
  23. protected void onPause() {
  24. super.onPause();
  25. threadAmplitude = null;
  26. threadTime = null;
  27. }
  28. private void setupViews() {
  29. btnMicRecord = (Button) findViewById(R.id.mic_record);
  30. btnMicPlay = (Button) findViewById(R.id.mic_play);
  31. btnMicFinish = (Button) findViewById(R.id.mic_finish);
  32. txtMicAmplitudeMsg = (TextView) findViewById(R.id.mic_amplitude_msg);
  33. txtMicTimeMsg = (TextView) findViewById(R.id.mic_time_msg);
  34. btnMicRecord.setOnClickListener(this);
  35. btnMicPlay.setOnClickListener(this);
  36. btnMicFinish.setOnClickListener(this);
  37. res = getResources();
  38. threadAmplitude = new Thread(new UpdateAmplitude());
  39. threadTime = new Thread(new UpdateTime());
  40. }
  41. //@Override
  42. public void onClick(View v) {
  43. switch (v.getId()) {
  44. case R.id.mic_record:
  45. if (mic_state== MIC_STATE_RECORD) { // 录音
  46. btnMicRecord.setText(res.getString(R.string.mic_record_save_text));
  47. mic_state = MIC_STATE_SAVE;
  48. startRecorder();
  49. } else if (mic_state== MIC_STATE_SAVE) {
  50. btnMicRecord.setText(res.getString(R.string.mic_record_text));
  51. btnMicRecord.setEnabled(false);
  52. btnMicPlay.setEnabled(true);
  53. mic_state = MIC_STATE_RECORD;
  54. stopRecorder();
  55. }
  56. break;
  57. case R.id.mic_play:
  58. openFile(recAudioFile);
  59. btnMicRecord.setEnabled(true);
  60. btnMicFinish.setEnabled(true);
  61. break;
  62. case R.id.mic_finish:
  63. new AlertDialog.Builder(MicActivity.this).setIcon(
  64. R.drawable.icon).setTitle(res.getString(R.string.mic_title))
  65. .setMessage(res.getString(R.string.mic_msg)).setPositiveButton(
  66. res.getString(R.string.yes), dialogClick)
  67. .setNegativeButton(res.getString(R.string.no), dialogClick).create().show();
  68. break;
  69. default:
  70. break;
  71. }
  72. }
  73. private android.content.DialogInterface.OnClickListener dialogClick = new android.content.DialogInterface.OnClickListener() {
  74. //@Override
  75. public void onClick(DialogInterface dialog, int which) {
  76. switch (which) {
  77. case DialogInterface.BUTTON_POSITIVE:
  78. result(true);
  79. break;
  80. case DialogInterface.BUTTON_NEGATIVE:
  81. result(false);
  82. break;
  83. default:
  84. break;
  85. }
  86. }
  87. };
  88. private void result(boolean flag){
  89. Intent intent = new Intent(MicActivity.this, MainActivity.class);
  90. intent.putExtra(MIC_RESULT, flag);
  91. setResult(REQUESTCODE_MIC_RESULT, intent);
  92. finish();
  93. }
  94. private class UpdateAmplitude implements Runnable{
  95. //@Override
  96. public void run() {
  97. while (threadRun) {
  98. try {
  99. Message msg = new Message();
  100. msg.what = mMediaRecorder.getMaxAmplitude();
  101. amplitudeHandler.sendMessage(msg);
  102. Thread.sleep(250);
  103. } catch (InterruptedException e) {
  104. e.printStackTrace();
  105. }
  106. }
  107. }
  108. }
  109. private Handler amplitudeHandler = new Handler(){
  110. @Override
  111. public void handleMessage(Message msg) {
  112. super.handleMessage(msg);
  113. String text = String.format(res.getString(R.string.mic_status_amplitude),String.valueOf(msg.what));
  114. txtMicAmplitudeMsg.setText(text);
  115. }
  116. };
  117. private class UpdateTime implements Runnable{
  118. //@Override
  119. public void run() {
  120. while (threadRun) {
  121. try {
  122. Thread.sleep(1000);
  123. time++;
  124. timeHandler.sendEmptyMessage(time);
  125. } catch (InterruptedException e) {
  126. e.printStackTrace();
  127. }
  128. }
  129. }
  130. }
  131. private Handler timeHandler = new Handler(){
  132. public void handleMessage(Message msg) {
  133. super.handleMessage(msg);
  134. String text = String.format(res.getString(R.string.mic_status_time), String.valueOf(msg.what));
  135. txtMicTimeMsg.setText(text);
  136. };
  137. };
  138. private void startRecorder(){
  139. mMediaRecorder = new MediaRecorder();
  140. recAudioFile = new File("/mnt/flash", "new.amr");
  141. if (recAudioFile.exists()) {
  142. recAudioFile.delete();
  143. }
  144. mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置录音来源
  145. mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
  146. mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
  147. mMediaRecorder.setOutputFile(recAudioFile.getAbsolutePath());
  148. try {
  149. mMediaRecorder.prepare();
  150. } catch (IllegalStateException e) {
  151. e.printStackTrace();
  152. } catch (IOException e) {
  153. e.printStackTrace();
  154. }
  155. mMediaRecorder.start();
  156. threadRun = true;
  157. threadAmplitude.start();
  158. threadTime.start();
  159. }
  160. private void stopRecorder(){
  161. time = 0;
  162. threadRun = false;
  163. if (recAudioFile!=null) {
  164. mMediaRecorder.stop();
  165. mMediaRecorder.release();
  166. }
  167. }
  168. /* 打开播放录音文件的程序 */
  169. private void openFile(File f) {
  170. Intent intent = new Intent();
  171. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  172. intent.setAction(android.content.Intent.ACTION_VIEW);
  173. String type = getMIMEType(f);
  174. intent.setDataAndType(Uri.fromFile(f), type);
  175. startActivity(intent);
  176. }
  177. private String getMIMEType(File f) {
  178. String end = f.getName().substring(f.getName().lastIndexOf(".") + 1,
  179. f.getName().length()).toLowerCase();
  180. String type = "";
  181. if (end.equals("mp3") || end.equals("aac") || end.equals("aac")
  182. || end.equals("amr") || end.equals("mpeg") || end.equals("mp4")) {
  183. type = "audio";
  184. } else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
  185. || end.equals("jpeg")) {
  186. type = "image";
  187. } else {
  188. type = "*";
  189. }
  190. type += "/*";
  191. return type;
  192. }
  193. }
[java] view plain copy
  1. public class MicActivity extends Activity implements OnClickListener{
  2. private final static String TAG="MicActivity";
  3. private Button btnMicRecord;
  4. private Button btnMicPlay;
  5. private Button btnMicFinish;
  6. private TextView txtMicAmplitudeMsg;
  7. private TextView txtMicTimeMsg;
  8. private File recAudioFile;
  9. private MediaRecorder mMediaRecorder;
  10. private Resources res;
  11. private static int time;
  12. private static int mic_state = MIC_STATE_RECORD;
  13. private Thread threadAmplitude;
  14. private Thread threadTime;
  15. private static boolean threadRun ;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.mic);
  20. setupViews();
  21. }
  22. @Override
  23. protected void onPause() {
  24. super.onPause();
  25. threadAmplitude = null;
  26. threadTime = null;
  27. }
  28. private void setupViews() {
  29. btnMicRecord = (Button) findViewById(R.id.mic_record);
  30. btnMicPlay = (Button) findViewById(R.id.mic_play);
  31. btnMicFinish = (Button) findViewById(R.id.mic_finish);
  32. txtMicAmplitudeMsg = (TextView) findViewById(R.id.mic_amplitude_msg);
  33. txtMicTimeMsg = (TextView) findViewById(R.id.mic_time_msg);
  34. btnMicRecord.setOnClickListener(this);
  35. btnMicPlay.setOnClickListener(this);
  36. btnMicFinish.setOnClickListener(this);
  37. res = getResources();
  38. threadAmplitude = new Thread(new UpdateAmplitude());
  39. threadTime = new Thread(new UpdateTime());
  40. }
  41. //@Override
  42. public void onClick(View v) {
  43. switch (v.getId()) {
  44. case R.id.mic_record:
  45. if (mic_state== MIC_STATE_RECORD) { // 录音
  46. btnMicRecord.setText(res.getString(R.string.mic_record_save_text));
  47. mic_state = MIC_STATE_SAVE;
  48. startRecorder();
  49. } else if (mic_state== MIC_STATE_SAVE) {
  50. btnMicRecord.setText(res.getString(R.string.mic_record_text));
  51. btnMicRecord.setEnabled(false);
  52. btnMicPlay.setEnabled(true);
  53. mic_state = MIC_STATE_RECORD;
  54. stopRecorder();
  55. }
  56. break;
  57. case R.id.mic_play:
  58. openFile(recAudioFile);
  59. btnMicRecord.setEnabled(true);
  60. btnMicFinish.setEnabled(true);
  61. break;
  62. case R.id.mic_finish:
  63. new AlertDialog.Builder(MicActivity.this).setIcon(
  64. R.drawable.icon).setTitle(res.getString(R.string.mic_title))
  65. .setMessage(res.getString(R.string.mic_msg)).setPositiveButton(
  66. res.getString(R.string.yes), dialogClick)
  67. .setNegativeButton(res.getString(R.string.no), dialogClick).create().show();
  68. break;
  69. default:
  70. break;
  71. }
  72. }
  73. private android.content.DialogInterface.OnClickListener dialogClick = new android.content.DialogInterface.OnClickListener() {
  74. //@Override
  75. public void onClick(DialogInterface dialog, int which) {
  76. switch (which) {
  77. case DialogInterface.BUTTON_POSITIVE:
  78. result(true);
  79. break;
  80. case DialogInterface.BUTTON_NEGATIVE:
  81. result(false);
  82. break;
  83. default:
  84. break;
  85. }
  86. }
  87. };
  88. private void result(boolean flag){
  89. Intent intent = new Intent(MicActivity.this, MainActivity.class);
  90. intent.putExtra(MIC_RESULT, flag);
  91. setResult(REQUESTCODE_MIC_RESULT, intent);
  92. finish();
  93. }
  94. private class UpdateAmplitude implements Runnable{
  95. //@Override
  96. public void run() {
  97. while (threadRun) {
  98. try {
  99. Message msg = new Message();
  100. msg.what = mMediaRecorder.getMaxAmplitude();
  101. amplitudeHandler.sendMessage(msg);
  102. Thread.sleep(250);
  103. } catch (InterruptedException e) {
  104. e.printStackTrace();
  105. }
  106. }
  107. }
  108. }
  109. private Handler amplitudeHandler = new Handler(){
  110. @Override
  111. public void handleMessage(Message msg) {
  112. super.handleMessage(msg);
  113. String text = String.format(res.getString(R.string.mic_status_amplitude),String.valueOf(msg.what));
  114. txtMicAmplitudeMsg.setText(text);
  115. }
  116. };
  117. private class UpdateTime implements Runnable{
  118. //@Override
  119. public void run() {
  120. while (threadRun) {
  121. try {
  122. Thread.sleep(1000);
  123. time++;
  124. timeHandler.sendEmptyMessage(time);
  125. } catch (InterruptedException e) {
  126. e.printStackTrace();
  127. }
  128. }
  129. }
  130. }
  131. private Handler timeHandler = new Handler(){
  132. public void handleMessage(Message msg) {
  133. super.handleMessage(msg);
  134. String text = String.format(res.getString(R.string.mic_status_time), String.valueOf(msg.what));
  135. txtMicTimeMsg.setText(text);
  136. };
  137. };
  138. private void startRecorder(){
  139. mMediaRecorder = new MediaRecorder();
  140. recAudioFile = new File("/mnt/flash", "new.amr");
  141. if (recAudioFile.exists()) {
  142. recAudioFile.delete();
  143. }
  144. mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置录音来源
  145. mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
  146. mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
  147. mMediaRecorder.setOutputFile(recAudioFile.getAbsolutePath());
  148. try {
  149. mMediaRecorder.prepare();
  150. } catch (IllegalStateException e) {
  151. e.printStackTrace();
  152. } catch (IOException e) {
  153. e.printStackTrace();
  154. }
  155. mMediaRecorder.start();
  156. threadRun = true;
  157. threadAmplitude.start();
  158. threadTime.start();
  159. }
  160. private void stopRecorder(){
  161. time = 0;
  162. threadRun = false;
  163. if (recAudioFile!=null) {
  164. mMediaRecorder.stop();
  165. mMediaRecorder.release();
  166. }
  167. }
  168. /* 打开播放录音文件的程序 */
  169. private void openFile(File f) {
  170. Intent intent = new Intent();
  171. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  172. intent.setAction(android.content.Intent.ACTION_VIEW);
  173. String type = getMIMEType(f);
  174. intent.setDataAndType(Uri.fromFile(f), type);
  175. startActivity(intent);
  176. }
  177. private String getMIMEType(File f) {
  178. String end = f.getName().substring(f.getName().lastIndexOf(".") + 1,
  179. f.getName().length()).toLowerCase();
  180. String type = "";
  181. if (end.equals("mp3") || end.equals("aac") || end.equals("aac")
  182. || end.equals("amr") || end.equals("mpeg") || end.equals("mp4")) {
  183. type = "audio";
  184. } else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
  185. || end.equals("jpeg")) {
  186. type = "image";
  187. } else {
  188. type = "*";
  189. }
  190. type += "/*";
  191. return type;
  192. }
  193. }

12、重力感应

[java] view plaincopy
  1. public class MySensorEventListener implements SensorEventListener {
  2. private boolean isPass;
  3. private SaveMessage saveMessage;
  4. public MySensorEventListener(Context context) {
  5. saveMessage = new SaveMessage(context);
  6. }
  7. // @Override
  8. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  9. }
  10. // @Override
  11. public void onSensorChanged(SensorEvent event) {
  12. if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
  13. // 得到方向的值
  14. float x = event.values[SensorManager.DATA_X];
  15. float y = event.values[SensorManager.DATA_Y];
  16. float z = event.values[SensorManager.DATA_Z];
  17. isPass = x != 0 || y != 0 || z != 0;
  18. System.out.println("Orientation-Seneor " + (isPass ? "ok!" + " x=" + x + " y=" + y + " z=" + z : "error!"));
  19. saveMessage.setMessage(MSG_SENEOR, "Orientation-Seneor " + (isPass ? "ok!" + " x=" + x + " y=" + y + " z=" + z : "error!"));
  20. } else if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
  21. // 得到加速度的值
  22. float x = event.values[SensorManager.DATA_X];
  23. float y = event.values[SensorManager.DATA_Y];
  24. float z = event.values[SensorManager.DATA_Z];
  25. isPass = x != 0 || y != 0 || z != 0;
  26. System.out.println("Accelerometer-Seneor " + (isPass ? "ok!" + " x=" + x + " y=" + y + " z=" + z : "error!"));
  27. saveMessage.setMessage(MSG_SENEOR, "Accelerometer-Seneor " + (isPass ? "ok!" + " x=" + x + " y=" + y + " z=" + z : "error!"));
  28. }
  29. }
  30. }
[java] view plain copy
  1. public class MySensorEventListener implements SensorEventListener {
  2. private boolean isPass;
  3. private SaveMessage saveMessage;
  4. public MySensorEventListener(Context context) {
  5. saveMessage = new SaveMessage(context);
  6. }
  7. // @Override
  8. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  9. }
  10. // @Override
  11. public void onSensorChanged(SensorEvent event) {
  12. if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
  13. // 得到方向的值
  14. float x = event.values[SensorManager.DATA_X];
  15. float y = event.values[SensorManager.DATA_Y];
  16. float z = event.values[SensorManager.DATA_Z];
  17. isPass = x != 0 || y != 0 || z != 0;
  18. System.out.println("Orientation-Seneor " + (isPass ? "ok!" + " x=" + x + " y=" + y + " z=" + z : "error!"));
  19. saveMessage.setMessage(MSG_SENEOR, "Orientation-Seneor " + (isPass ? "ok!" + " x=" + x + " y=" + y + " z=" + z : "error!"));
  20. } else if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
  21. // 得到加速度的值
  22. float x = event.values[SensorManager.DATA_X];
  23. float y = event.values[SensorManager.DATA_Y];
  24. float z = event.values[SensorManager.DATA_Z];
  25. isPass = x != 0 || y != 0 || z != 0;
  26. System.out.println("Accelerometer-Seneor " + (isPass ? "ok!" + " x=" + x + " y=" + y + " z=" + z : "error!"));
  27. saveMessage.setMessage(MSG_SENEOR, "Accelerometer-Seneor " + (isPass ? "ok!" + " x=" + x + " y=" + y + " z=" + z : "error!"));
  28. }
  29. }
  30. }

原创文章,转载请注明出处: http://blog.csdn.net/tangcheng_ok/article/details/6684646

Android开发之--(WIFI,蓝牙,电池,背光,SD卡,摄像头,按键,MIC,重力感应等)功能的简单使用相关推荐

  1. 最简单DIY基于ESP8266的智能彩灯⑥(Android开发通过WIFI控制彩灯实现表白神器)

    ESP8266和ESP32智能彩灯开发系列文章目录 第一篇:最简单DIY基于ESP8266的智能彩灯①(在网页用按钮点亮普通RGB灯) 第二篇:最简单DIY基于ESP8266的智能彩灯②(在网页用按键 ...

  2. android 音乐播放器 获取sd卡所有音乐文件,Android Studio音乐播放器无法读取SD卡,只有内部存储器...

    我很抱歉,如果这原来是一个愚蠢的问题,它可能会成为一个快速修复,但我只是无法弄清楚.我在android studio中创建了音乐播放器,并且没有任何sdcard上的歌曲不会显示在列表视图中,只有内部内 ...

  3. android设计一个多线程和画图的程序小球,Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例...

    本文实例讲述了Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能的方法.分享给大家供大家参考,具体如下: 1.布局界面 xmlns:tools="http://sc ...

  4. android加密设备,用于Android手机的加密设备和加密外部SD卡

    电话被盗或丢失后,隐私将被泄露. Android手机具有"加密设备"和"加密外部SD卡"功能. 那么这两个功能有什么区别? 加密设备 加密设备后,内置SD卡上的 ...

  5. 使用vscode + gcc进行 STM32 单片机开发(三)DMA读写SD卡,移植FATFS文件系统

    背景 在本系列的前两篇文章( 使用vscode + gcc进行 STM32 单片机开发(一)编译及调试 使用vscode + gcc进行 STM32 单片机开发(二)gcc环境 移植rtthread) ...

  6. android 6.0 存储卡,Android 6.0区别U盘和SD卡设备的方法详解

    如下所示: public static boolean isSdcardExists(Context context) { StorageManager storageManager = Storag ...

  7. Android 开发利用wifi调试

    本文主要介绍在Android开发中如何利用wifi进行应用调试以及其原理.通常我们都是通过数据线连接手机终端和PC进行调试,在没有数据线的情况下如何连接PC和手机呢. 1.要求 手机必须root过,手 ...

  8. Android开发 无线Wifi+WifiUtil工具类,android开发网格布局

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  9. 安卓从sd引导linux,从android中的adb shell手动挂载SD卡

    我不敢相信没有人在2个月内回复你?哇-多么懈怠! 好吧无论如何我想我应该填写一些信息并提出一些问题. 1).您是否拥有root权限,或者是否从发布映像/固件中获取了系统vold?像Linux Supe ...

最新文章

  1. begin.lydsy 入门OJ题库:1104:纯粹合数
  2. reactor与proactor模式
  3. 【Interfacenavigation】风格和主题(21)
  4. 【随笔】深度学习之美——杨家有女初长成,养在深闺人未识
  5. python空值赋0_Python中的空值判断
  6. 通信系统的同步技术归纳
  7. linux内核Kconfig语法
  8. Spring cloud eureka 入门使用及指导说明(单机篇)
  9. PHPInfo()信息泄漏——综合利用提权
  10. 写, 读sdcard目录上的文件
  11. SpringMVC框架学习上篇
  12. 基于遗传算法的柔性流水车间调度设计与实现(论文+源码+答辩ppt)
  13. python webp图片转化格式
  14. python爬虫爬取下厨房食谱,周末聚餐真的停不下来
  15. 10类职业人士最容易受到失眠困扰
  16. 云效安全那些事儿-Codeup代码智能安全检测服务
  17. WordPress必装插件推荐
  18. 安装vm12+CentOS7+Docker以及常见问题解决
  19. 【疯狂的架构】牛公司组织结构图一览:华为,阿里,腾讯,百度,新浪……
  20. docker invalid reference format: repository name must be lowercase

热门文章

  1. 函数的单调性与曲线的凹凸性
  2. linux中文件大小10,Linux之查看文件大小
  3. c语言单元测试(cunit)打桩,如何写打桩文件
  4. 糊滤镜给人物脸部磨皮教程
  5. Java/26. Remove Duplicates from Storted Array 删除排序数组的重复项
  6. 《托尔斯泰的烦恼》纪录片笔记
  7. 【pytorch】ValueError: Expected more than 1 value per channel when training
  8. ZUCC_操作系统实验_Lab7进程通信---共享内存
  9. Terraformer-wkt-parser wkt和geoJson转换
  10. OV7725寄存器配置