`

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

 
阅读更多

这篇文章主要是记录前段时间开发所用到的一些技术,在这里做个总结,文中有不足之处还请看到本文的你多多指点。分享分享开发经验,一起提高!

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

  1. packagecn.tch;
  2. importjava.util.List;
  3. importandroid.content.Context;
  4. importandroid.net.wifi.ScanResult;
  5. importandroid.net.wifi.WifiConfiguration;
  6. importandroid.net.wifi.WifiInfo;
  7. importandroid.net.wifi.WifiManager;
  8. importandroid.net.wifi.WifiManager.WifiLock;
  9. publicclassWifiHelper{
  10. //定义WifiManager对象
  11. privateWifiManagermWifiManager;
  12. //定义WifiInfo对象
  13. privateWifiInfomWifiInfo;
  14. //扫描出的网络连接列表
  15. privateList<ScanResult>mWifiList;
  16. //网络连接列表
  17. privateList<WifiConfiguration>mWifiConfiguration;
  18. //定义一个WifiLock
  19. WifiLockmWifiLock;
  20. //构造器
  21. publicWifiHelper(Contextcontext){
  22. //取得WifiManager对象
  23. mWifiManager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
  24. //取得WifiInfo对象
  25. mWifiInfo=mWifiManager.getConnectionInfo();
  26. }
  27. publicWifiManagergetWifiManager(){
  28. returnmWifiManager;
  29. }
  30. //打开WIFI
  31. publicbooleanopenWifi(){
  32. booleanflag=false;
  33. if(!mWifiManager.isWifiEnabled()){
  34. flag=mWifiManager.setWifiEnabled(true);
  35. }elseif(mWifiManager.isWifiEnabled()){
  36. flag=true;
  37. }
  38. returnflag;
  39. }
  40. //关闭WIFI
  41. publicvoidcloseWifi(){
  42. if(!mWifiManager.isWifiEnabled()){
  43. mWifiManager.setWifiEnabled(false);
  44. }
  45. }
  46. //锁定WifiLock
  47. publicvoidacquireWifiLock(){
  48. mWifiLock.acquire();
  49. }
  50. //解锁WifiLock
  51. publicvoidreleaseWifiLock(){
  52. //判断时候锁定
  53. if(mWifiLock.isHeld()){
  54. mWifiLock.acquire();
  55. }
  56. }
  57. //创建一个WifiLock
  58. publicvoidcreatWifiLock(){
  59. mWifiLock=mWifiManager.createWifiLock("Test");
  60. }
  61. //得到配置好的网络
  62. publicList<WifiConfiguration>getConfiguration(){
  63. returnmWifiConfiguration;
  64. }
  65. //指定配置好的网络进行连接
  66. publicvoidconnectConfiguration(intindex){
  67. //索引大于配置好的网络索引返回
  68. if(index>mWifiConfiguration.size()){
  69. return;
  70. }
  71. //连接配置好的指定ID的网络
  72. mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,true);
  73. }
  74. publicvoidstartScan(){
  75. mWifiManager.startScan();
  76. //得到扫描结果
  77. mWifiList=mWifiManager.getScanResults();
  78. //得到配置好的网络连接
  79. mWifiConfiguration=mWifiManager.getConfiguredNetworks();
  80. }
  81. //得到网络列表
  82. publicList<ScanResult>getWifiList(){
  83. mWifiManager.startScan();
  84. //得到扫描结果
  85. returnmWifiManager.getScanResults();
  86. }
  87. //查看扫描结果
  88. publicStringBuilderlookUpScan(List<ScanResult>list){
  89. StringBuilderstringBuilder=newStringBuilder();
  90. for(inti=0;i<list.size();i++){
  91. stringBuilder
  92. .append("\n结果"+newInteger(i+1).toString()+"(");
  93. //将ScanResult信息转换成一个字符串包
  94. //其中把包括:BSSID、SSID、capabilities、frequency、level
  95. stringBuilder.append((list.get(i)).toString());
  96. stringBuilder.append(")\n");
  97. }
  98. returnstringBuilder;
  99. }
  100. //得到MAC地址
  101. publicStringgetMacAddress(){
  102. return(mWifiInfo==null)?"NULL":mWifiInfo.getMacAddress();
  103. }
  104. //得到接入点的BSSID
  105. publicStringgetBSSID(){
  106. return(mWifiInfo==null)?"NULL":mWifiInfo.getBSSID();
  107. }
  108. //得到IP地址
  109. publicintgetIPAddress(){
  110. return(mWifiInfo==null)?0:mWifiInfo.getIpAddress();
  111. }
  112. //得到连接的ID
  113. publicintgetNetworkId(){
  114. return(mWifiInfo==null)?0:mWifiInfo.getNetworkId();
  115. }
  116. //得到WifiInfo的所有信息包
  117. publicStringgetWifiInfo(){
  118. return(mWifiInfo==null)?"NULL":mWifiInfo.toString();
  119. }
  120. //添加一个网络并连接
  121. publicvoidaddNetwork(WifiConfigurationwcg){
  122. intwcgID=mWifiManager.addNetwork(wcg);
  123. mWifiManager.enableNetwork(wcgID,true);
  124. }
  125. //断开指定ID的网络
  126. publicvoiddisconnectWifi(intnetId){
  127. mWifiManager.disableNetwork(netId);
  128. mWifiManager.disconnect();
  129. }
  130. }

2、蓝牙

  1. booleanflag=false;
  2. lt;preclass="java"name="code">BluetoothAdapterbluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter.isEnabled()) { bluetoothAdapter.disable(); flag = bluetoothAdapter.enable(); } else { flag = bluetoothAdapter.enable(); }


3、电池

1、新建一个广播接收类

  1. packagecn.tch;
  2. importandroid.content.BroadcastReceiver;
  3. importandroid.content.Context;
  4. importandroid.content.Intent;
  5. importandroid.content.res.Resources;
  6. importandroid.os.BatteryManager;
  7. importandroid.util.Log;
  8. importjava.util.ArrayList;
  9. publicclassBatteryBroadcastReceiverextendsBroadcastReceiver{
  10. privateStringaction;
  11. privateintstatus;
  12. privateinthealth;
  13. privateintplugged;
  14. privateStringstatusString;
  15. privateStringhealthString;
  16. privateStringacString;
  17. privateResourcesmResources;
  18. privateStringBufferbuffer=newStringBuffer();
  19. privatestaticintcount=0;
  20. privateArrayList<String>batteryMsg;
  21. intlevel;//电池电量,数字
  22. intscale;//电池最大容量
  23. intvoltage;//电池伏数
  24. inttemperature;//电池温度
  25. publicBatteryBroadcastReceiver(Resourcesres){
  26. mResources=res;
  27. batteryMsg=newArrayList<String>();
  28. }
  29. @Override
  30. publicvoidonReceive(Contextcontext,Intentintent){
  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. caseBatteryManager.BATTERY_STATUS_UNKNOWN:
  37. statusString="unknown";
  38. break;
  39. caseBatteryManager.BATTERY_STATUS_CHARGING:
  40. statusString="charging";
  41. break;
  42. caseBatteryManager.BATTERY_STATUS_DISCHARGING:
  43. statusString="discharging";
  44. break;
  45. caseBatteryManager.BATTERY_STATUS_NOT_CHARGING:
  46. statusString="notcharging";
  47. break;
  48. caseBatteryManager.BATTERY_STATUS_FULL:
  49. statusString="full";
  50. break;
  51. }
  52. switch(health){
  53. caseBatteryManager.BATTERY_HEALTH_UNKNOWN:
  54. healthString="unknown";
  55. break;
  56. caseBatteryManager.BATTERY_HEALTH_GOOD:
  57. healthString="good";
  58. break;
  59. caseBatteryManager.BATTERY_HEALTH_OVERHEAT:
  60. healthString="overheat";
  61. break;
  62. caseBatteryManager.BATTERY_HEALTH_DEAD:
  63. healthString="dead";
  64. break;
  65. caseBatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
  66. healthString="voltage";
  67. break;
  68. caseBatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
  69. healthString="unspecifiedfailure";
  70. break;
  71. }
  72. switch(plugged){
  73. caseBatteryManager.BATTERY_PLUGGED_AC:
  74. acString="pluggedac";
  75. break;
  76. caseBatteryManager.BATTERY_PLUGGED_USB:
  77. acString="pluggedusb";
  78. break;
  79. }
  80. //if(action.equals(Intent.ACTION_BATTERY_CHANGED)){
  81. //for(inti=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. //Stringmsg=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、注册广播

  1. IntentFilterintentFilter=newIntentFilter();
  2. intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
  3. registerReceiver(batteryReceiver,intentFilter);

4、背光

  1. packagecn.tch;
  2. importandroid.app.Activity;
  3. importandroid.app.AlertDialog;
  4. importandroid.content.DialogInterface;
  5. importandroid.content.Intent;
  6. importandroid.content.res.Resources;
  7. importandroid.os.Bundle;
  8. importandroid.os.Handler;
  9. importandroid.os.Message;
  10. importandroid.os.RemoteException;
  11. importandroid.provider.Settings;
  12. importandroid.provider.Settings.SettingNotFoundException;
  13. importandroid.util.Log;
  14. importandroid.view.View;
  15. importandroid.view.View.OnClickListener;
  16. importandroid.widget.Button;
  17. importandroid.widget.ProgressBar;
  18. importandroid.widget.SeekBar;
  19. importandroid.widget.SeekBar.OnSeekBarChangeListener;
  20. importandroid.os.IPowerManager;
  21. importandroid.os.ServiceManager;
  22. importstaticcn.tch.Constant.*;
  23. publicclassBacklightActivityextendsActivityimplementsOnSeekBarChangeListener{
  24. privatefinalstaticStringTAG="BacklightActivity";
  25. privateSeekBarseekBar;
  26. privateButtonbtnFinish;
  27. privateResourcesres;
  28. privateintmOldBrightness=0;
  29. privatestaticfinalintMINIMUM_BACKLIGHT=android.os.Power.BRIGHTNESS_DIM+10;
  30. privatestaticfinalintMAXIMUM_BACKLIGHT=android.os.Power.BRIGHTNESS_ON;
  31. privatebooleanisRun=true;
  32. @Override
  33. protectedvoidonCreate(BundlesavedInstanceState){
  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(newOnClickListener(){
  42. //@Override
  43. publicvoidonClick(Viewv){
  44. newAlertDialog.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. privateandroid.content.DialogInterface.OnClickListenerdialogClick=newandroid.content.DialogInterface.OnClickListener(){
  53. //@Override
  54. publicvoidonClick(DialogInterfacedialog,intwhich){
  55. switch(which){
  56. caseDialogInterface.BUTTON_POSITIVE:
  57. resultRquest(true);
  58. break;
  59. caseDialogInterface.BUTTON_NEGATIVE:
  60. resultRquest(false);
  61. break;
  62. default:
  63. break;
  64. }
  65. }
  66. };
  67. privatevoidresultRquest(booleanflag){
  68. Intentintent=newIntent(this,MainActivity.class);
  69. intent.putExtra(BACKLIGHT_RESULT,flag);
  70. setResult(REQUESTCODE_BACKLIGHT_RESULT,intent);
  71. finish();
  72. }
  73. //@Override
  74. publicvoidonProgressChanged(SeekBarseekBar,intprogress,
  75. booleanfromUser){
  76. intstep=25;
  77. Settings.System.putInt(BacklightActivity.this.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS,progress+MINIMUM_BACKLIGHT);
  78. setBrightness(progress+MINIMUM_BACKLIGHT);
  79. }
  80. privatevoidinitBrightness(){
  81. //获取当前背光亮度
  82. try{
  83. mOldBrightness=Settings.System.getInt(BacklightActivity.this.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);
  84. }catch(SettingNotFoundExceptione){
  85. mOldBrightness=MAXIMUM_BACKLIGHT;
  86. }
  87. seekBar.setMax(MAXIMUM_BACKLIGHT-MINIMUM_BACKLIGHT);
  88. Log.v("Brightnessmax","setmax:"+(MAXIMUM_BACKLIGHT-MINIMUM_BACKLIGHT));
  89. //seekBar.setProgress(mOldBrightness-MINIMUM_BACKLIGHT);
  90. seekBar.setProgress(0);
  91. newThread(newRunnable(){
  92. intvalue=0;
  93. publicvoidrun(){
  94. while(isRun){
  95. try{
  96. Thread.sleep(150);
  97. value=value+5;
  98. Messagemessage=newMessage();
  99. message.what=value;
  100. handler.sendEmptyMessage(message.what);
  101. }catch(InterruptedExceptione){
  102. }
  103. }
  104. }
  105. }).start();
  106. }
  107. privateHandlerhandler=newHandler(){
  108. publicvoidhandleMessage(android.os.Messagemsg){
  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. privatevoidsetBrightness(intbrightness){
  119. try{
  120. IPowerManagerpower=IPowerManager.Stub.asInterface(ServiceManager.getService("power"));
  121. if(power!=null){
  122. power.setBacklightBrightness(brightness);
  123. }
  124. }catch(RemoteExceptiondoe){
  125. Log.e(TAG,"SettingBrightnessRemoteException!");
  126. }
  127. }
  128. //@Override
  129. publicvoidonStartTrackingTouch(SeekBarseekBar){}
  130. //@Override
  131. publicvoidonStopTrackingTouch(SeekBarseekBar){}
  132. }

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

  1. staticStringgetSdcardPath(){
  2. returnEnvironment.getExternalStorageDirectory().getPath();
  3. }
  4. staticbooleancheckSdcard(){
  5. booleanflag=false;
  6. if(Environment.getExternalStorageDirectory().toString().equals("/mnt/sdcard")){
  7. flag=true;
  8. }
  9. returnflag;
  10. }

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

7、振动马达

  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、摄像头(拍照和预览)

  1. publicclassCameraActivityextendsActivity{
  2. /**
  3. *第一种方式实现拍照
  4. */
  5. //privatePreViewpreView=null;
  6. //
  7. //@Override
  8. //protectedvoidonCreate(BundlesavedInstanceState){
  9. //super.onCreate(savedInstanceState);
  10. //this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  11. //preView=newPreView(this);
  12. //setContentView(preView,newLayoutParams(400,300));
  13. //}
  14. //
  15. //@Override
  16. //publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  17. //returnpreView.onKeyDown(keyCode,event);
  18. //}
  19. privatefinalstaticStringTAG="CameraActivity";
  20. privateSurfaceViewsurfaceView;
  21. privateSurfaceHoldersurfaceHolder;
  22. privateCameracamera;
  23. privateFilepicture;
  24. privateButtonbtnFinish;
  25. privateDialogmDialog;
  26. privateResourcesres;
  27. @Override
  28. publicvoidonCreate(BundlesavedInstanceState){
  29. super.onCreate(savedInstanceState);
  30. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  31. setContentView(R.layout.camera);
  32. setupViews();
  33. }
  34. privatevoidsetupViews(){
  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(newOnClickListener(){
  42. //@Override
  43. publicvoidonClick(Viewv){
  44. //提示是否看到预览
  45. if(mDialog==null){
  46. mDialog=newAlertDialog.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. privateandroid.content.DialogInterface.OnClickListenerdialogClick=newandroid.content.DialogInterface.OnClickListener(){
  56. //@Override
  57. publicvoidonClick(DialogInterfacedialog,intwhich){
  58. switch(which){
  59. caseDialogInterface.BUTTON_POSITIVE:
  60. resultRquest(true);
  61. break;
  62. caseDialogInterface.BUTTON_NEGATIVE:
  63. resultRquest(false);
  64. break;
  65. default:
  66. break;
  67. }
  68. }
  69. };
  70. privatevoidresultRquest(booleanflag){
  71. Intentintent=newIntent(CameraActivity.this,MainActivity.class);
  72. intent.putExtra(CAMERA_RESULT,flag);
  73. setResult(REQUESTCODE_CAMERA_RESULT,intent);
  74. finish();
  75. }
  76. @Override
  77. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  78. if(keyCode==KeyEvent.KEYCODE_CAMERA
  79. ||keyCode==KeyEvent.KEYCODE_SEARCH){
  80. takePic();
  81. returntrue;
  82. }
  83. returnsuper.onKeyDown(keyCode,event);
  84. }
  85. privatevoidtakePic(){
  86. camera.stopPreview();//停止预览
  87. camera.takePicture(null,null,pictureCallback);//拍照
  88. }
  89. //照片回调
  90. Camera.PictureCallbackpictureCallback=newCamera.PictureCallback(){
  91. //@Override
  92. publicvoidonPictureTaken(byte[]data,Cameracamera){
  93. newSavePictureTask().execute(data);
  94. camera.startPreview();
  95. }
  96. };
  97. //保存照片任务类
  98. classSavePictureTaskextendsAsyncTask<byte[],String,String>{
  99. @Override
  100. protectedStringdoInBackground(byte[]...params){
  101. picture=newFile(Environment.getExternalStorageDirectory(),
  102. "picture.jpg");//创建文件
  103. if(picture.exists())
  104. picture.delete();//如果文件存在删除掉
  105. try{
  106. FileOutputStreamfos=newFileOutputStream(picture.getPath());//获得文件输出流
  107. fos.write(params[0]);//写到该文件
  108. fos.close();//关闭文件流
  109. }catch(Exceptione){
  110. e.printStackTrace();
  111. }
  112. returnnull;
  113. }
  114. }
  115. //SurfaceHodler回调,处理打开相机,关闭相机以及照片尺寸的改变
  116. SurfaceHolder.CallbacksurfaceCallback=newSurfaceHolder.Callback(){
  117. //@Override
  118. publicvoidsurfaceCreated(SurfaceHolderholder){
  119. camera=Camera.open();//打开相机
  120. try{
  121. camera.setPreviewDisplay(holder);//设置预览
  122. }catch(IOExceptione){
  123. camera.release();//释放
  124. camera=null;
  125. }
  126. }
  127. //@Override
  128. publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,
  129. intheight){
  130. Camera.Parametersparameters=camera.getParameters();//获得相机参数
  131. parameters.setPictureFormat(PixelFormat.JPEG);//设置照片格式
  132. parameters.setPreviewSize(400,300);//设置照片大小
  133. camera.setParameters(parameters);//设置相机参数
  134. camera.startPreview();//开始预览
  135. }
  136. //@Override
  137. publicvoidsurfaceDestroyed(SurfaceHolderholder){
  138. Log.i(TAG,"====surfaceDestroyed");
  139. camera.stopPreview();//停止预览
  140. camera.release();//释放相机资源
  141. camera=null;
  142. }
  143. };
  144. }

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

以下是屏蔽Home键的方法:
  1. @Override
  2. publicvoidonAttachedToWindow(){
  3. this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
  4. super.onAttachedToWindow();
  5. }

10、音乐播放器

11、录音

  1. publicclassMicActivityextendsActivityimplementsOnClickListener{
  2. privatefinalstaticStringTAG="MicActivity";
  3. privateButtonbtnMicRecord;
  4. privateButtonbtnMicPlay;
  5. privateButtonbtnMicFinish;
  6. privateTextViewtxtMicAmplitudeMsg;
  7. privateTextViewtxtMicTimeMsg;
  8. privateFilerecAudioFile;
  9. privateMediaRecordermMediaRecorder;
  10. privateResourcesres;
  11. privatestaticinttime;
  12. privatestaticintmic_state=MIC_STATE_RECORD;
  13. privateThreadthreadAmplitude;
  14. privateThreadthreadTime;
  15. privatestaticbooleanthreadRun;
  16. @Override
  17. protectedvoidonCreate(BundlesavedInstanceState){
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.mic);
  20. setupViews();
  21. }
  22. @Override
  23. protectedvoidonPause(){
  24. super.onPause();
  25. threadAmplitude=null;
  26. threadTime=null;
  27. }
  28. privatevoidsetupViews(){
  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=newThread(newUpdateAmplitude());
  39. threadTime=newThread(newUpdateTime());
  40. }
  41. //@Override
  42. publicvoidonClick(Viewv){
  43. switch(v.getId()){
  44. caseR.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. }elseif(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. caseR.id.mic_play:
  58. openFile(recAudioFile);
  59. btnMicRecord.setEnabled(true);
  60. btnMicFinish.setEnabled(true);
  61. break;
  62. caseR.id.mic_finish:
  63. newAlertDialog.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. privateandroid.content.DialogInterface.OnClickListenerdialogClick=newandroid.content.DialogInterface.OnClickListener(){
  74. //@Override
  75. publicvoidonClick(DialogInterfacedialog,intwhich){
  76. switch(which){
  77. caseDialogInterface.BUTTON_POSITIVE:
  78. result(true);
  79. break;
  80. caseDialogInterface.BUTTON_NEGATIVE:
  81. result(false);
  82. break;
  83. default:
  84. break;
  85. }
  86. }
  87. };
  88. privatevoidresult(booleanflag){
  89. Intentintent=newIntent(MicActivity.this,MainActivity.class);
  90. intent.putExtra(MIC_RESULT,flag);
  91. setResult(REQUESTCODE_MIC_RESULT,intent);
  92. finish();
  93. }
  94. privateclassUpdateAmplitudeimplementsRunnable{
  95. //@Override
  96. publicvoidrun(){
  97. while(threadRun){
  98. try{
  99. Messagemsg=newMessage();
  100. msg.what=mMediaRecorder.getMaxAmplitude();
  101. amplitudeHandler.sendMessage(msg);
  102. Thread.sleep(250);
  103. }catch(InterruptedExceptione){
  104. e.printStackTrace();
  105. }
  106. }
  107. }
  108. }
  109. privateHandleramplitudeHandler=newHandler(){
  110. @Override
  111. publicvoidhandleMessage(Messagemsg){
  112. super.handleMessage(msg);
  113. Stringtext=String.format(res.getString(R.string.mic_status_amplitude),String.valueOf(msg.what));
  114. txtMicAmplitudeMsg.setText(text);
  115. }
  116. };
  117. privateclassUpdateTimeimplementsRunnable{
  118. //@Override
  119. publicvoidrun(){
  120. while(threadRun){
  121. try{
  122. Thread.sleep(1000);
  123. time++;
  124. timeHandler.sendEmptyMessage(time);
  125. }catch(InterruptedExceptione){
  126. e.printStackTrace();
  127. }
  128. }
  129. }
  130. }
  131. privateHandlertimeHandler=newHandler(){
  132. publicvoidhandleMessage(Messagemsg){
  133. super.handleMessage(msg);
  134. Stringtext=String.format(res.getString(R.string.mic_status_time),String.valueOf(msg.what));
  135. txtMicTimeMsg.setText(text);
  136. };
  137. };
  138. privatevoidstartRecorder(){
  139. mMediaRecorder=newMediaRecorder();
  140. recAudioFile=newFile("/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(IllegalStateExceptione){
  151. e.printStackTrace();
  152. }catch(IOExceptione){
  153. e.printStackTrace();
  154. }
  155. mMediaRecorder.start();
  156. threadRun=true;
  157. threadAmplitude.start();
  158. threadTime.start();
  159. }
  160. privatevoidstopRecorder(){
  161. time=0;
  162. threadRun=false;
  163. if(recAudioFile!=null){
  164. mMediaRecorder.stop();
  165. mMediaRecorder.release();
  166. }
  167. }
  168. /*打开播放录音文件的程序*/
  169. privatevoidopenFile(Filef){
  170. Intentintent=newIntent();
  171. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  172. intent.setAction(android.content.Intent.ACTION_VIEW);
  173. Stringtype=getMIMEType(f);
  174. intent.setDataAndType(Uri.fromFile(f),type);
  175. startActivity(intent);
  176. }
  177. privateStringgetMIMEType(Filef){
  178. Stringend=f.getName().substring(f.getName().lastIndexOf(".")+1,
  179. f.getName().length()).toLowerCase();
  180. Stringtype="";
  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. }elseif(end.equals("jpg")||end.equals("gif")||end.equals("png")
  185. ||end.equals("jpeg")){
  186. type="image";
  187. }else{
  188. type="*";
  189. }
  190. type+="/*";
  191. returntype;
  192. }
  193. }
12、重力感应
  1. publicclassMySensorEventListenerimplementsSensorEventListener{
  2. privatebooleanisPass;
  3. privateSaveMessagesaveMessage;
  4. publicMySensorEventListener(Contextcontext){
  5. saveMessage=newSaveMessage(context);
  6. }
  7. //@Override
  8. publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){
  9. }
  10. //@Override
  11. publicvoidonSensorChanged(SensorEventevent){
  12. if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){
  13. //得到方向的值
  14. floatx=event.values[SensorManager.DATA_X];
  15. floaty=event.values[SensorManager.DATA_Y];
  16. floatz=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. }elseif(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
  21. //得到加速度的值
  22. floatx=event.values[SensorManager.DATA_X];
  23. floaty=event.values[SensorManager.DATA_Y];
  24. floatz=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. }
分享到:
评论
1 楼 zy_zhangyuan88 2012-07-16  
//preview-size-values=1280x720,800x480,768x432,720x480,640x480,576x432,480x320,400x240,384x288,352x288,320x240,272x272,240x240,240x160,176x144,160x120
                //picture-size-values=2592x1952,2592x1456,2592x1936,2592x1728,2592x1552,2048x1536,2048x1360,2048x1216,2048x1152,1600x1200,1584x1056,1280x960,1280x848,1280x768,1280x720,1024x768,640x480,640x416,640x384,640x368,512x384,400x400,272x272

相关推荐

Global site tag (gtag.js) - Google Analytics