玩轉Android之加速度傳感器的使用,模仿微信搖一搖

Android系統帶的傳感器有很多種,最常見的莫過于微信的搖一搖了,那么今天我們就來看看Anroid中傳感器的使用,做一個類似于微信搖一搖的效果。

OK ,廢話不多說,我們就先來看看效果圖吧:

當我搖動手機的時候這里的動畫效果基本和微信上的動畫效果一致,這里請大家自行腦補微信搖一搖畫面。

那我們就動手吧。

1.布局文件

好,那我們先來看看布局文件吧,在布局文件的正中央是一個花的圖片,上圖大家看到的手機圖片實際上是兩張圖片拼接在一起,將花的那張圖片遮住了,當搖一搖的時候,這兩張圖片分別向上或者向下移動,然后花的圖片就可以顯示出來。OK,基本原理就是這樣,我們來看看代碼:

[java] view plaincopy print?
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <RelativeLayout??
  3. ????xmlns:android="http://schemas.android.com/apk/res/android"??
  4. ????xmlns:tools="http://schemas.android.com/tools"??
  5. ????android:layout_width="match_parent"??
  6. ????android:layout_height="match_parent"??
  7. ????android:background="#1f1f1f">??
  8. ??
  9. ????<ImageView??
  10. ????????android:layout_width="wrap_content"??
  11. ????????android:layout_height="wrap_content"??
  12. ????????android:src="@drawable/flower"/>??
  13. ??
  14. ????<LinearLayout??
  15. ????????android:layout_width="wrap_content"??
  16. ????????android:layout_height="wrap_content"??
  17. ????????android:layout_centerInParent="true"??
  18. ????????android:orientation="vertical">??
  19. ??
  20. ????????<ImageView??
  21. ????????????android:id="@+id/up"??
  22. ????????????android:layout_width="wrap_content"??
  23. ????????????android:layout_height="wrap_content"??
  24. ????????????android:src="@drawable/up"/>??
  25. ??
  26. ????????<ImageView??
  27. ????????????android:id="@+id/down"??
  28. ????????????android:layout_width="wrap_content"??
  29. ????????????android:layout_height="wrap_content"??
  30. ????????????android:src="@drawable/down"/>??
  31. ????</LinearLayout>??
  32. </RelativeLayout>??



2.傳感器監聽手機晃動

既然要監聽手機加速度的變化,那我首先需要獲取系統的傳感器:

[java] view plaincopy print?
  1. //獲取到一個傳感器管理器??
  2. ????????sensorManager?=?(SensorManager)?getSystemService(SENSOR_SERVICE);??
  3. ????????//獲得一個加速度傳感器??
  4. ????????Sensor?sensor?=?sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);??

這兩行代碼首先是獲取一個傳感器管理器,然后獲取加速度傳感器,因為關于傳感器的API 有很多,這里你需要指明自己要獲取的是哪一個傳感器。拿到傳感器之后,需要注冊監聽,如下:
[java] view plaincopy print?
  1. sensorManager.registerListener(listener,?sensor,?SensorManager.SENSOR_DELAY_GAME);??

注冊傳感器的監聽一共需要三個參數,第一個是監聽器,第二個是加速度傳感器,第三個是傳感器的靈敏度,傳感器的靈敏度一共分為四級,如下,從上往下靈敏度依次降低:
    1. SENSOR_DELAY_FASTEST
   2. SENSOR_DELAY_GAME
   3. SENSOR_DELAY_UI
   4. SENSOR_DELAY_NORMAL

OK ,注冊完之后,我們還是來看看這個監聽器是什么吧:

[java] view plaincopy print?
  1. private?SensorEventListener?listener?=?new?SensorEventListener()?{??
  2. ????????//當手機的加速度發生變化時調用??
  3. ????????@Override??
  4. ????????public?void?onSensorChanged(SensorEvent?event)?{??
  5. ????????????//獲取手機在不同方向上加速度的變化??
  6. ????????????float?valuesX?=?Math.abs(event.values[0]);??
  7. ????????????float?valuesY?=?Math.abs(event.values[1]);??
  8. ????????????float?valuesZ?=?Math.abs(event.values[2]);??
  9. ??
  10. ????????????if?(valuesX?>?17?||?valuesY?>?17?||?valuesZ?>?17)?{??
  11. ????????????????startAnimation();??
  12. ????????????????playSound();??
  13. ????????????}??
  14. ????????}??
  15. ??
  16. ????????@Override??
  17. ????????public?void?onAccuracyChanged(Sensor?sensor,?int?accuracy)?{??
  18. ??
  19. ????????}??
  20. ????};??

這個listener中一共就兩個方法,一個是當手機的加速度發生改變的時候調用,還有一個是當傳感器的靈敏度發生改變的時候調用,當手機的加速度發生改變的時候,我們可以獲取到手機在X 、Y、Z 三個維度上的變化值,拿到這個值之后,我們只需要進行簡單的比較即可,如果有任意一個方向的值大于17,則認為有人在晃動手機,這個時候開啟動畫和聲音的播放。

3.開啟動畫和聲音

動畫實際上就是兩個平移動畫,我們來看看:

[java] view plaincopy print?
  1. private?void?startAnimation()?{??
  2. ????//如果兩次晃動手機的時間小于1秒,則只執行一次動畫??
  3. ????long?currentTimeMillis?=?System.currentTimeMillis();??
  4. ????if?(currentTimeMillis?-?lastTime?<?1000)?{??
  5. ????????return;??
  6. ????}??
  7. ????lastTime?=?currentTimeMillis;??
  8. ????AnimationSet?upSet?=?new?AnimationSet(true);??
  9. ????TranslateAnimation?upUp?=?new?TranslateAnimation(TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,??
  10. ????????????0,?TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,?-1);??
  11. ????upUp.setDuration(1000);??
  12. ????TranslateAnimation?upDown?=?new?TranslateAnimation(TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,??
  13. ????????????0,?TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,?1);??
  14. ????upDown.setDuration(1000);??
  15. ????upDown.setStartOffset(1000);??
  16. ????upSet.addAnimation(upUp);??
  17. ????upSet.addAnimation(upDown);??
  18. ????up.startAnimation(upSet);??
  19. ????AnimationSet?downSet?=?new?AnimationSet(true);??
  20. ????TranslateAnimation?downUp?=?new?TranslateAnimation(TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,??
  21. ????????????0,?TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,?1);??
  22. ????downUp.setDuration(1000);??
  23. ????TranslateAnimation?downDown?=?new?TranslateAnimation(TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,??
  24. ????????????0,?TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,?-1);??
  25. ????downDown.setDuration(1000);??
  26. ????downDown.setStartOffset(1000);??
  27. ????downSet.addAnimation(downUp);??
  28. ????downSet.addAnimation(downDown);??
  29. ????down.startAnimation(downSet);??
  30. }??

至于聲音,由于我這里只是播放比較短小的音效而已,所以并沒有必要使用MediaPlayer,我可以通過一個聲音池來解決這個問題,代碼如下:
[java] view plaincopy print?
  1. /**?
  2. ?*?初始化聲音池?
  3. ?*/??
  4. private?void?initSoundPool()?{??
  5. ????if?(Build.VERSION.SDK_INT?>?20)?{??
  6. ????????SoundPool.Builder?builder?=?new?SoundPool.Builder();??
  7. ????????//1.最大并發流數??
  8. ????????builder.setMaxStreams(3);??
  9. ????????AudioAttributes.Builder?aaBuilder?=?new?AudioAttributes.Builder();??
  10. ????????aaBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC);??
  11. ????????builder.setAudioAttributes(aaBuilder.build());??
  12. ????????soundPool?=?builder.build();??
  13. ????}?else?{??
  14. ????????soundPool?=?new?SoundPool(3,?AudioManager.STREAM_MUSIC,?0);??
  15. ????}??
  16. ????//加載一個音頻文件??
  17. ????sound1?=?soundPool.load(this,?R.raw.awe,?1);??
  18. }??

在創建一個聲音池的時候我采取了兩種不同的方案,如果系統的版本大于20,則是用第一種方式獲取聲音池,否則使用第二種方式獲取聲音池。獲取聲音池之后,再通過聲音池加載一個音頻文件。加載完成之后,我就可以對這個音頻文件進行播放了,如下:
[java] view plaincopy print?
  1. //1.聲音的id??
  2. //2.3.表示左右聲道的音量??
  3. //4.優先級??
  4. //5.是否循環??
  5. //6.聲音播放速率??
  6. soundPool.play(sound1,?1,?1,?0,?0,?1);??

每個參數的含義都寫的很清楚了,大家又不清楚的地方可以直接看源碼,這里的源碼注釋很好懂。

?

最后一步就是開啟手機震動了,開啟手機震動,我需要首先獲取震動服務,如下:

[java] view plaincopy print?
  1. //獲取手機震動服務??
  2. ???????vibrator?=?(Vibrator)?getSystemService(VIBRATOR_SERVICE);??

然后調用Vibrator類中的vibrator方法執行震動,如下:
[java] view plaincopy print?
  1. //1.表示震動的節奏off/on/off/on/off/on......??
  2. ????????//2.表示是否重復震動,-1表示不重復??
  3. ????????vibrator.vibrate(new?long[]{100,?200,?100,?200,?100,?200},?-1);??

手機震動一定要記得添加震動權限哦,如下:
[java] view plaincopy print?
  1. <uses-permission?android:name="android.permission.VIBRATE"?/>??

OK ,最后,在銷毀Activity的時候要解除對傳感器的監聽,同時釋放聲音池資源,如下:
[java] view plaincopy print?
  1. @Override??
  2. protected?void?onDestroy()?{??
  3. ????super.onDestroy();??
  4. ????//解除對加速度傳感器的監聽??
  5. ????sensorManager.unregisterListener(listener);??
  6. ????if?(soundPool?!=?null)?{??
  7. ????????//聲音池釋放資源??
  8. ????????soundPool.release();??
  9. ????}??
  10. }??

完整的Activity 代碼如下:
[java] view plaincopy print?
  1. public?class?MainActivity?extends?AppCompatActivity?{??
  2. ????private?ImageView?up;??
  3. ????private?ImageView?down;??
  4. ????//上一次晃動手機的時間??
  5. ????private?long?lastTime;??
  6. ????private?SoundPool?soundPool;??
  7. ????private?int?sound1;??
  8. ????private?Vibrator?vibrator;??
  9. ????private?SensorEventListener?listener?=?new?SensorEventListener()?{??
  10. ????????//當手機的加速度發生變化時調用??
  11. ????????@Override??
  12. ????????public?void?onSensorChanged(SensorEvent?event)?{??
  13. ????????????//獲取手機在不同方向上加速度的變化??
  14. ????????????float?valuesX?=?Math.abs(event.values[0]);??
  15. ????????????float?valuesY?=?Math.abs(event.values[1]);??
  16. ????????????float?valuesZ?=?Math.abs(event.values[2]);??
  17. ??
  18. ????????????if?(valuesX?>?17?||?valuesY?>?17?||?valuesZ?>?17)?{??
  19. ????????????????startAnimation();??
  20. ????????????????playSound();??
  21. ????????????}??
  22. ????????}??
  23. ??
  24. ????????@Override??
  25. ????????public?void?onAccuracyChanged(Sensor?sensor,?int?accuracy)?{??
  26. ??
  27. ????????}??
  28. ????};??
  29. ????private?SensorManager?sensorManager;??
  30. ??
  31. ????private?void?playSound()?{??
  32. ????????//1.聲音的id??
  33. ????????//2.3.表示左右聲道的音量??
  34. ????????//4.優先級??
  35. ????????//5.是否循環??
  36. ????????//6.聲音播放速率??
  37. ????????soundPool.play(sound1,?1,?1,?0,?0,?1);??
  38. ????????//手機震動??
  39. ????????//1.表示震動的節奏off/on/off/on/off/on......??
  40. ????????//2.表示是否重復震動,-1表示不重復??
  41. ????????vibrator.vibrate(new?long[]{100,?200,?100,?200,?100,?200},?-1);??
  42. ????}??
  43. ??
  44. ????private?void?startAnimation()?{??
  45. ????????//如果兩次晃動手機的時間小于1秒,則只執行一次動畫??
  46. ????????long?currentTimeMillis?=?System.currentTimeMillis();??
  47. ????????if?(currentTimeMillis?-?lastTime?<?1000)?{??
  48. ????????????return;??
  49. ????????}??
  50. ????????lastTime?=?currentTimeMillis;??
  51. ????????AnimationSet?upSet?=?new?AnimationSet(true);??
  52. ????????TranslateAnimation?upUp?=?new?TranslateAnimation(TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,??
  53. ????????????????0,?TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,?-1);??
  54. ????????upUp.setDuration(1000);??
  55. ????????TranslateAnimation?upDown?=?new?TranslateAnimation(TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,??
  56. ????????????????0,?TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,?1);??
  57. ????????upDown.setDuration(1000);??
  58. ????????upDown.setStartOffset(1000);??
  59. ????????upSet.addAnimation(upUp);??
  60. ????????upSet.addAnimation(upDown);??
  61. ????????up.startAnimation(upSet);??
  62. ????????AnimationSet?downSet?=?new?AnimationSet(true);??
  63. ????????TranslateAnimation?downUp?=?new?TranslateAnimation(TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,??
  64. ????????????????0,?TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,?1);??
  65. ????????downUp.setDuration(1000);??
  66. ????????TranslateAnimation?downDown?=?new?TranslateAnimation(TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,??
  67. ????????????????0,?TranslateAnimation.RELATIVE_TO_SELF,?0,?TranslateAnimation.RELATIVE_TO_SELF,?-1);??
  68. ????????downDown.setDuration(1000);??
  69. ????????downDown.setStartOffset(1000);??
  70. ????????downSet.addAnimation(downUp);??
  71. ????????downSet.addAnimation(downDown);??
  72. ????????down.startAnimation(downSet);??
  73. ????}??
  74. ??
  75. ????@Override??
  76. ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  77. ????????super.onCreate(savedInstanceState);??
  78. ????????setContentView(R.layout.activity_main);??
  79. ????????up?=?((ImageView)?findViewById(R.id.up));??
  80. ????????down?=?((ImageView)?findViewById(R.id.down));??
  81. ????????initSensor();??
  82. ????????initSoundPool();??
  83. ????????//獲取手機震動服務??
  84. ????????vibrator?=?(Vibrator)?getSystemService(VIBRATOR_SERVICE);??
  85. ????}??
  86. ??
  87. ????/**?
  88. ?????*?初始化聲音池?
  89. ?????*/??
  90. ????private?void?initSoundPool()?{??
  91. ????????if?(Build.VERSION.SDK_INT?>?20)?{??
  92. ????????????SoundPool.Builder?builder?=?new?SoundPool.Builder();??
  93. ????????????//1.最大并發流數??
  94. ????????????builder.setMaxStreams(3);??
  95. ????????????AudioAttributes.Builder?aaBuilder?=?new?AudioAttributes.Builder();??
  96. ????????????aaBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC);??
  97. ????????????builder.setAudioAttributes(aaBuilder.build());??
  98. ????????????soundPool?=?builder.build();??
  99. ????????}?else?{??
  100. ????????????soundPool?=?new?SoundPool(3,?AudioManager.STREAM_MUSIC,?0);??
  101. ????????}??
  102. ????????//加載一個音頻文件??
  103. ????????sound1?=?soundPool.load(this,?R.raw.awe,?1);??
  104. ????}??
  105. ??
  106. ????/**?
  107. ?????*?初始化傳感器?
  108. ?????*/??
  109. ????private?void?initSensor()?{??
  110. ????????//獲取到一個傳感器管理器??
  111. ????????sensorManager?=?(SensorManager)?getSystemService(SENSOR_SERVICE);??
  112. ????????//獲得一個加速度傳感器??
  113. ????????Sensor?sensor?=?sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);??
  114. ????????//注冊傳感器監聽,??
  115. ????????//1.監聽器??
  116. ????????//2.加速度傳感器??
  117. ????????//3.傳感器靈敏度??
  118. ????????//傳感器靈敏度分為四級,從上往下靈敏度依次降低??
  119. ????????//SENSOR_DELAY_FASTEST??
  120. ????????//SENSOR_DELAY_GAME??
  121. ????????//SENSOR_DELAY_UI??
  122. ????????//SENSOR_DELAY_NORMAL??
  123. ????????sensorManager.registerListener(listener,?sensor,?SensorManager.SENSOR_DELAY_GAME);??
  124. ????}??
  125. ??
  126. ????@Override??
  127. ????protected?void?onDestroy()?{??
  128. ????????super.onDestroy();??
  129. ????????//解除對加速度傳感器的監聽??
  130. ????????sensorManager.unregisterListener(listener);??
  131. ????????if?(soundPool?!=?null)?{??
  132. ????????????//聲音池釋放資源??
  133. ????????????soundPool.release();??
  134. ????????}??
  135. ????}??
  136. }??

以上。

?

轉載于:https://www.cnblogs.com/Free-Thinker/p/6544174.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372710.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372710.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372710.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖像

背景圖案的設置 將圖片插入到網頁中去 用圖像作為超鏈接 使用工具建立地圖索引 切片索引 為網站添加圖標 5.1 背景圖案的設置&#xff08;背景不占位置&#xff0c;不影響文本的輸入&#xff09; 格式&#xff1a;<body background"URL"> 5.2 將圖片插入…

Maven構建依賴項

熟悉發行版和快照依賴項的Maven和Gradle用戶可能不了解TeamCity快照依賴項&#xff0c;或者認為他們與Maven相關&#xff08;這是不正確的&#xff09;。 熟悉工件和快照依賴關系的TeamCity用戶可能不知道&#xff0c;除了TeamCity提供的插件之外&#xff0c;添加Artifactory插…

Java兩種設計模式_23種設計模式(11)java策略模式

23種設計模式第四篇&#xff1a;java策略模式定義&#xff1a;定義一組算法&#xff0c;將每個算法都封裝起來&#xff0c;并且使他們之間可以互換。類型&#xff1a;行為類模式類圖&#xff1a;策略模式是對算法的封裝&#xff0c;把一系列的算法分別封裝到對應的類中&#xf…

Problem E: 平面上的點——Point類 (II)

Description 在數學上&#xff0c;平面直角坐標系上的點用X軸和Y軸上的兩個坐標值唯一確定。現在我們封裝一個“Point類”來實現平面上的點的操作。 根據“append.cc”&#xff0c;完成Point類的構造方法和show()方法&#xff0c;輸出各Point對象的構造和析構次序。 接口描述&a…

MFC 控件RadioButton和CheckBox區別

1. 單個RadioButton在選中后&#xff0c;通過點擊無法變為未選中 單個CheckBox在選中后&#xff0c;通過點擊可以變為未選中 2. 一組RadioButton&#xff0c;只能同時選中一個 一組CheckBox&#xff0c;能同時選中多個 3. RadioButton在大部分UI框架中默認都以圓形表示 CheckBo…

什么是ActiveMQ?

盡管Active MQ網站已經對ActiveMQ進行了詳盡的介紹&#xff0c;但我想在其定義中添加更多上下文。 從ActiveMQ項目的網站上&#xff1a; “ ActiveMQ是JMS 1.1的開源實現&#xff0c;是J2EE 1.4規范的一部分。” 這是我的看法&#xff1a;ActiveMQ是一種開源消息傳遞軟件&…

字符串倒著輸出java_Java 輸出反轉字符串

Java 輸出反轉字符串public class Test {public static void main(String args[]){try{// 獲取鍵盤輸入的字符串BufferReader f new BufferReader(new inputStreamReader(System.in));String str f.readline();for (int i str.length() -1 ; i >0 ; i--) {System.out.p…

webpack基礎入門

我相信&#xff0c;有不少的朋友對webpack都有或多或少的了解。網上也有了各種各樣的文章&#xff0c;文章內作者也寫出了不少自己對于webpack這個工具的理解。在我剛剛接觸webpack的時候&#xff0c;老實說&#xff0c;網上大部分的文章我是看不懂的。。webpack里面有很多名詞…

位運算基礎

異或運算的基礎有點忘記了 先介紹一下。。2個數異或 就是對于每一個二進制位進行位運算 具有2個特殊的性質 1、一個數異或本身恒等于0&#xff0c;如5^5恒等于0&#xff1b; 2、一個數異或0恒等于本身&#xff0c;如5^0恒等于5。 3 滿足交換律 1.交換數字這個性質能利用與交換數…

JAXB自定義綁定– Java.util.Date / Spring 3序列化

JaxB可以處理Java.util.Date序列化&#xff0c;但是需要以下格式&#xff1a; “ yyyy-MM-ddTHH&#xff1a;mm&#xff1a;ss ”。 如果需要將日期對象格式化為另一種格式怎么辦&#xff1f; 我有同樣的問題時&#xff0c;我正在同春MVC 3和Jackson JSON處理器 &#xff0c;最…

雙足機器人簡單步態生成

讓機器人行走最簡單的方法是先得到一組步態曲線&#xff0c;即腿部每個關節隨時間運動的角度值。可以在ADAMS或3D Max、Blender等軟件中建立好機構/骨骼模型&#xff0c;設計出腳踝和髖關節的運動曲線&#xff0c;然后進行逆運動學解算&#xff0c;測量每個關節在運動過程中的轉…

重新訪問了訪客模式

訪客模式是面向對象設計中最被高估但又被低估的模式之一。 高估了它&#xff0c;因為它常常被選擇得太快&#xff08; 可能是由建筑宇航員選擇的 &#xff09;&#xff0c;然后以錯誤的方式添加時會膨脹本來非常簡單的設計。 如果您不遵循教科書示例&#xff0c;那么它可能會非…

java web開發技術大_2021年六大javaweb開發主流技術

作為歷史最為悠久的編程語言——java&#xff0c;歷經數十年依然盤踞在編程榜最前面的位置&#xff0c;這與它的技術和應用范圍是分不開的&#xff0c;同時呢&#xff0c;javaweb開發主流技術更是java開發者時時刻刻關注的問題&#xff0c;接下來我們一起分析一下2020年互聯網行…

ASP.NET—013:實現帶控件的彈出層(彈出框)

http://blog.csdn.net/yysyangyangyangshan/article/details/38458169 在頁面中用到彈出新頁面的情況比較多的&#xff0c;一般來說都是使用JS方法showModalDialog("新頁面相對路徑?參數1&參數2",window,"新頁面樣式");然后會新彈出一個模態的page頁。…

運維人員日常工作(轉自老男孩)

1&#xff09;運維人員要謹記的6個字&#xff1a; 運維人員做事需遵循&#xff1a;簡單、易用、高效 &#xff08;2&#xff09;運維人員服務的3大宗旨&#xff1a; 1、企業數據安全保障。 2、7*24小時業務持續提供服務。 3、不斷提升用戶感受、體驗。 &#xff08;3&#xff0…

c# 操作DatatTable

dtTemp.Columns.Add("列名");//增加一列 dtTemp.Columns.Remove("列名");//刪除一列 dtTemp.Columns["舊列名"].ColumnName "新列名";//修改列名 dtTemp.Columns["列名1"].SetOrdinal(dtTemp.Columns["列名2"].O…

java 二進制 歸屬權限_【Java EE 學習 75 上】【數據采集系統第七天】【二進制運算實現權限管理】【權限分析和設計】...

一、權限計算相關分析1.如何存儲權限首先說一下權限保存的問題&#xff0c;一個系統中最多有多少權限呢&#xff1f;一個大的系統中可能有成百上千個權限需要管理。怎么保存這么多的權限&#xff1f;首先&#xff0c;我們使用一個數字中的一位保存一種權限&#xff0c;那么如果…

MongoDB性能測試

因此&#xff0c;今天早上&#xff0c;我在mongo shell中四處亂逛。 我想出了三種不同的方式來聚合所需的數據&#xff0c;但不確定隨后應移植哪種代碼以在應用程序中使用。 那么&#xff0c;我將如何決定實施哪種方法呢&#xff1f; 好吧&#xff0c;讓我們選擇性能最佳的產品…

$_SERVER[SCRIPT_NAME]、$_SERVER[PHP_SELF]、$_SERVER[QUERY_STRING]、$_SERVER[REQUEST_URI]

1、$_SERVER["SCRIPT_NAME"] 說明&#xff1a;包含當前腳本的路徑 2、$_SERVER["PHP_SELF"] 說明&#xff1a;當前正在執行腳本的文件名 3、$_SERVER["QUERY_STRING"] 說明&#xff1a;查詢(query)的字符串 4、$_SERVER["REQUEST_URI"…

yii2增刪改查及AR的理解

yii2增刪改查 // 返回 id 為 1 的客戶 $customer Customer::findOne(1); // 返回 id 為 1 且狀態為 *active* 的客戶 $customer Customer::findOne([ id > 1, status > Customer::STATUS_ACTIVE, ]); // 返回id為1、2、3的一組客戶 $customers Customer::findAll([1, …