android有用代碼片斷 (一)

有時候,須要一些小的功能,找到之後,就把它貼到了博客下面,做爲留言,查找起來很不方便,因此就整理一下,方便本身和他人。

1、 獲取系統版本號:
html

  1. PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);
  2. int versionCode=nfo.versionCode
  3. string versionName=info.versionNam
PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0); int versionCode=nfo.versionCode string versionName=info.versionNam
2、獲取系統信息:

  1. <span style="font-size:16px;">String archiveFilePath="sdcard/download/Law.apk";//安裝包路徑
  2. PackageManager pm = getPackageManager();
  3. PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES);
  4. if(info != null){
  5. ApplicationInfo appInfo = info.applicationInfo;
  6. String appName = pm.getApplicationLabel(appInfo).toString();
  7. String packageName = appInfo.packageName; //獲得安裝包名稱
  8. String version=info.versionName; //獲得版本信息
  9. Toast.makeText(test4.this, "packageName:"+packageName+";version:"+version, Toast.LENGTH_LONG).show();
  10. Drawable icon = pm.getApplicationIcon(appInfo);//獲得圖標信息
  11. TextView tv = (TextView)findViewById(R.id.tv); //顯示圖標
  12. tv.setBackgroundDrawable(icon);</span>
<span style="font-size:16px;">String archiveFilePath="sdcard/download/Law.apk";//安裝包路徑 PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES); if(info != null){ ApplicationInfo appInfo = info.applicationInfo; String appName = pm.getApplicationLabel(appInfo).toString(); String packageName = appInfo.packageName; //獲得安裝包名稱 String version=info.versionName; //獲得版本信息 Toast.makeText(test4.this, "packageName:"+packageName+";version:"+version, Toast.LENGTH_LONG).show(); Drawable icon = pm.getApplicationIcon(appInfo);//獲得圖標信息 TextView tv = (TextView)findViewById(R.id.tv); //顯示圖標 tv.setBackgroundDrawable(icon);</span>
3、獲取安裝路徑和已安裝程序列表

  1. <span style="font-size:16px;">(1)android中獲取當前程序路徑
  2. getApplicationContext().getFilesDir().getAbsolutePath()
  3. (2)android取已安裝的程序列表
  4. List<PackageInfo> packageInfoList = getPackageManager().getInstalledPackages(0);</span>
<span style="font-size:16px;">(1)android中獲取當前程序路徑 getApplicationContext().getFilesDir().getAbsolutePath() (2)android取已安裝的程序列表 List<PackageInfo> packageInfoList = getPackageManager().getInstalledPackages(0);</span>
4、獲取圖片、應用名、包名

  1. <span style="font-size:16px;">PackageManager pManager = MessageSendActivity.this.getPackageManager();
  2. List<PackageInfo> appList = Utils.getAllApps(MessageSendActivity.this);
  3. for(int i=0;i<appList.size();i++) {
  4. PackageInfo pinfo = appList.get(i);
  5. ShareItemInfo shareItem = new ShareItemInfo();
  6. //set Icon
  7. shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
  8. //set Application Name shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());
  9. //set Package Name shareItem.setPackageName(pinfo.applicationInfo.packageName);
  10. }</span>
<span style="font-size:16px;">PackageManager pManager = MessageSendActivity.this.getPackageManager(); List<PackageInfo> appList = Utils.getAllApps(MessageSendActivity.this); for(int i=0;i<appList.size();i++) { PackageInfo pinfo = appList.get(i); ShareItemInfo shareItem = new ShareItemInfo(); //set Icon shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo)); //set Application Name shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString()); //set Package Name shareItem.setPackageName(pinfo.applicationInfo.packageName); }</span> 5、解決listview上 Item上有按鈕時 item自己不能點擊的問題:

  1. <span style="font-size:16px;">1. 在item試圖上面添加代碼: android:descendantFocusability="blocksDescendants"
  2. 2.在listview裏 添加代碼 android:focusable="true"</span>
<span style="font-size:16px;">1. 在item試圖上面添加代碼: android:descendantFocusability="blocksDescendants" 2.在listview裏 添加代碼 android:focusable="true"</span> 6、不讓文本框輸入中文:

  1. <span style="font-size:16px;">在xml文件裏面</span>
<span style="font-size:16px;">在xml文件裏面</span>
  1. <span style="font-size:16px;">android:digits="1234567890qwertyuiopasdfghjklzxcvbnm`-=[]\;,./~!@#$%^*()_+}{:?&<>"'"
  2. 這樣就不會輸入中文了。
  3. </span>
<span style="font-size:16px;">android:digits="1234567890qwertyuiopasdfghjklzxcvbnm`-=[]\;,./~!@#$%^*()_+}{:?&<>"'" 這樣就不會輸入中文了。 </span>
7、獲取屏幕寬高

  1. <span style="font-size:16px;">DisplayMetrics displayMetrics = new DisplayMetrics();
  2. this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
  3. int height = displayMetrics.heightPixels;
  4. int width = displayMetrics.widthPixels;
  5. </span>
<span style="font-size:16px;">DisplayMetrics displayMetrics = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int height = displayMetrics.heightPixels; int width = displayMetrics.widthPixels; </span> 8、將TabWidget顯示在屏幕下方

  1. <span style="font-size:16px;">設置TabWidget的屬性 android:layout_alignParentBottom="true"</span>
<span style="font-size:16px;">設置TabWidget的屬性 android:layout_alignParentBottom="true"</span> 爲了讓tabHost顯示在下方,要將RadioGroup的layout_gravity設置爲bottom,再將FrameLayout的 layout_weight設置爲1,這樣就能夠將RadioGroup撐到最下方。style="@style/main_tab_bottom"裏面定義了樣式文件

9、獲取線程ID和線程名稱:java

  1. <span style="font-size:16px;">Log.v("@@@@@@@@@@",Thread.currentThread().getId()+" "+Thread.currentThread().getName());
  2. </span>
<span style="font-size:16px;">Log.v("@@@@@@@@@@",Thread.currentThread().getId()+" "+Thread.currentThread().getName()); </span>
10、android中調用其它android應用

  1. <span style="font-size:16px;">ComponentName comp = new ComponentName("com.Test","com.login.Main");
  2. intent = new Intent();
  3. intent.setComponent(comp);
  4. intent.setAction("android.intent.action.VIEW");
  5. startActivity(intent);
  6. </span>
<span style="font-size:16px;">ComponentName comp = new ComponentName("com.Test","com.login.Main"); intent = new Intent(); intent.setComponent(comp); intent.setAction("android.intent.action.VIEW"); startActivity(intent); </span> 11、禁止軟鍵盤彈出

  1. <span style="font-size:16px;">EditText有焦點(focusable爲true)阻止輸入法彈出 editText.setInputType(InputType.TYPE_NULL); // 關閉軟鍵盤
  2. 當EidtText無焦點(focusable=false)時阻止輸入法彈出
  3. InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
  4. imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
  5. </span>
<span style="font-size:16px;">EditText有焦點(focusable爲true)阻止輸入法彈出 editText.setInputType(InputType.TYPE_NULL); // 關閉軟鍵盤 當EidtText無焦點(focusable=false)時阻止輸入法彈出 InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); </span> 【Android】EditText標籤調用鍵盤
在xml文件中EditText標籤有一個屬性android:editable="false"和android:numeric="integer"

android:numeric="integer"表示只容許輸入數字,此屬性能夠限制用戶只能輸入數字內容。
android:editable表示是否能夠輸入內容TRUE表示能夠輸入,false表示不容許輸入內容;
當爲android:editable="false"時,點擊輸入框,虛擬鍵盤是顯示不出來的,不過當設置了 android:editable=""屬性時,不論是false仍是true,在其後加入android:numeric="integer"屬性時,是能夠輸入數字內容了;這裏沒搞明白是怎麼回事,也許是numeric把前面的屬性覆蓋掉了。
當android:editable="false"時,在java類裏若是再規定EditText.setEnabled(true)時,虛擬鍵盤仍是不會顯示的。

12、模擬器的各類規格與分辨率對照:
  1. 單位:像素
  2. WVGA854: 854*480
  3. WVGA800: 800*480
  4. HVGA: 480*320
  5. QVGA: 320*240
  6. WQVGA432:432*240
  7. WQVGA400:400*240
單位:像素 WVGA854: 854*480 WVGA800: 800*480 HVGA: 480*320 QVGA: 320*240 WQVGA432:432*240 WQVGA400:400*240
十3、調用Android其餘Context的Activity
  1. Context c = createPackageContext("chroya.demo", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
  2. //載入這個類
  3. Class clazz = c.getClassLoader().loadClass("chroya.demo.Main");
  4. //新建一個實例
  5. Object owner = clazz.newInstance();
  6. //獲取print方法,傳入參數並執行
  7. Object obj = clazz.getMethod("print", String.class).invoke(owner, "Hello");
Context c = createPackageContext("chroya.demo", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY); //載入這個類 Class clazz = c.getClassLoader().loadClass("chroya.demo.Main"); //新建一個實例 Object owner = clazz.newInstance(); //獲取print方法,傳入參數並執行 Object obj = clazz.getMethod("print", String.class).invoke(owner, "Hello"); 這個方法有兩個參數:
一、packageName 包名,要獲得Context的包名
二、 flags 標誌位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY兩個選項。 CONTEXT_INCLUDE_CODE的意思是包括代碼,也就是說能夠執行這個包裏面的代碼。CONTEXT_IGNORE_SECURITY的意思 是忽略安全警告,若是不加這個標誌的話,有些功能是用不了的,會出現安全警告。
十4、android4.0Dialog風格小技巧

4.0上若是還用Theme.Dialog,只能說很土,跟總體UI風格差異很大linux

請使用android:theme="@android :style/Theme.Holo.DialogWhenLarge"android


十5、程序中安裝apk
  1. Intent intent = new Intent();
  2. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  3. intent.setAction(android.content.Intent.ACTION_VIEW);
  4. intent.setDataAndType(Uri.fromFile(「APK」),"application/vnd.android.package-archive");
  5. startActivity(intent);
Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(「APK」),"application/vnd.android.package-archive"); startActivity(intent);

其中「apk」爲你要安裝的那個文件。git

十6、獲取設備型號、SDK版本及系統版本安全

  1. String device_model = Build.MODEL; // 設備型號
  2. String version_sdk = Build.VERSION.SDK; // 設備SDK版本
  3. String version_release = Build.VERSION.RELEASE; // 設備的系統版本
String device_model = Build.MODEL; // 設備型號 String version_sdk = Build.VERSION.SDK; // 設備SDK版本 String version_release = Build.VERSION.RELEASE; // 設備的系統版本

十7、圖片分析功能網絡

  1. public void SharePhoto(String photoUri,final Activity activity) {
  2. Intent shareIntent = new Intent(Intent.ACTION_SEND);
  3. File file = new File(photoUri);
  4. shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
  5. shareIntent.setType("image/jpeg");
  6. StartActivity(Intent.createChooser(shareIntent, activity.getTitle()));
  7. }
public void SharePhoto(String photoUri,final Activity activity) { Intent shareIntent = new Intent(Intent.ACTION_SEND); File file = new File(photoUri); shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); shareIntent.setType("image/jpeg"); StartActivity(Intent.createChooser(shareIntent, activity.getTitle())); }

十8、linux關機命令app

在Windows下,按着電源鍵4秒強制關機,在Linux下強烈不建議這麼作。Windows因爲是單用戶、「假多」任務的狀況,因此即便你的計算機關機,也不會對別人形成影響。不過在Linux中,因爲每一個程序都是在後臺執行的,所以,在你看不到的屏幕背後可能有不少人同時在你的主機上工做。並且,若不正常關機可能會形成文件系統的損毀。因此,正常狀況下,要關機時須要注意下面幾件事情:ide

(1)查看系統的使用狀態。ui

要看目前有誰在線,能夠用who命令。要看網絡的聯機狀態,能夠用netstat-a命令。要看後臺執行那個的程序能夠執行ps-aux命令。

(2)通知在線用戶的關機時刻

這個時候可使用shutdown命令

  1. Shutdown命令:
  2. 語法:shutdown[-t秒][-arkhncfF]時間 警告消息
  3. -t:後面加描述表示過幾秒以後關機。
  4. -k:不是真的關機,僅僅發出警告消息。
  5. -r:將系統服務停掉以後重啓。
  6. -h:將系統服務停掉以後當即關機。
  7. -f:關機並開機以後,強制跳過fsck的磁盤檢查。
  8. -F:系統重啓以後,強制進行fsck的磁盤檢查。
  9. -c:取消已經進行的shutdown命令內容。
  10. 另外,重啓關機命令有reboot、halt、poweroff。其實在默認狀況下,都完成同樣的工做。
  11. halt先調用shutdown,而shutdown最後調用halt。不過,shutdown能夠根據目前已經啓動的服務來逐次關閉服務後才關機;而halt可以在不理會目前系統狀況下,進行硬件關機的特殊功能。
  12. 除了這些,還有一個關機命令是init 0
  13. init是切換執行等級的命令。Linux共有7種執行等級,比較重要的是下面4種等級:
  14. run level 0:關機
  15. run level 3:純命令行模式
  16. run level 5:含有圖形界面模式
  17. run level 6:重啓
Shutdown命令: 語法:shutdown[-t秒][-arkhncfF]時間 警告消息 -t:後面加描述表示過幾秒以後關機。 -k:不是真的關機,僅僅發出警告消息。 -r:將系統服務停掉以後重啓。 -h:將系統服務停掉以後當即關機。 -f:關機並開機以後,強制跳過fsck的磁盤檢查。 -F:系統重啓以後,強制進行fsck的磁盤檢查。 -c:取消已經進行的shutdown命令內容。 另外,重啓關機命令有reboot、halt、poweroff。其實在默認狀況下,都完成同樣的工做。 halt先調用shutdown,而shutdown最後調用halt。不過,shutdown能夠根據目前已經啓動的服務來逐次關閉服務後才關機;而halt可以在不理會目前系統狀況下,進行硬件關機的特殊功能。 除了這些,還有一個關機命令是init 0 init是切換執行等級的命令。Linux共有7種執行等級,比較重要的是下面4種等級: run level 0:關機 run level 3:純命令行模式 run level 5:含有圖形界面模式 run level 6:重啓
十9、讓本身的應用不被kill掉
能夠在frameworks\base\services\java\com\android\server\am\ActivityManagerService.java這個類的forceStopPackage中加一個條件:
  1. public void forceStopPackage(final String packageName) {
  2. if (checkCallingPermission(android.Manifest.permission.FORCE_STOP_PACKAGES)
  3. != PackageManager.PERMISSION_GRANTED) {
  4. String msg = "Permission Denial: forceStopPackage() from pid="
  5. + Binder.getCallingPid()
  6. + ", uid=" + Binder.getCallingUid()
  7. + " requires " + android.Manifest.permission.FORCE_STOP_PACKAGES;
  8. Slog.w(TAG, msg);
  9. throw new SecurityException(msg);
  10. }
  11. long callingId = Binder.clearCallingIdentity();
  12. try {
  13. IPackageManager pm = ActivityThread.getPackageManager();
  14. int pkgUid = -1;
  15. synchronized(this) {
  16. try {
  17. pkgUid = pm.getPackageUid(packageName);
  18. } catch (RemoteException e) {
  19. }
  20. if (pkgUid == -1) {
  21. Slog.w(TAG, "Invalid packageName: " + packageName);
  22. return;
  23. }
  24. //begin:加入一個判斷條件
  25. if (packageName.equals("你的進程名")) {
  26. return;
  27. }
  28. //end: 加入一個判斷條件 forceStopPackageLocked(packageName, pkgUid);
  29. }
  30. } finally {
  31. Binder.restoreCallingIdentity(callingId);
  32. }
  33. }
public void forceStopPackage(final String packageName) { if (checkCallingPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) != PackageManager.PERMISSION_GRANTED) { String msg = "Permission Denial: forceStopPackage() from pid=" + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid() + " requires " + android.Manifest.permission.FORCE_STOP_PACKAGES; Slog.w(TAG, msg); throw new SecurityException(msg); } long callingId = Binder.clearCallingIdentity(); try { IPackageManager pm = ActivityThread.getPackageManager(); int pkgUid = -1; synchronized(this) { try { pkgUid = pm.getPackageUid(packageName); } catch (RemoteException e) { } if (pkgUid == -1) { Slog.w(TAG, "Invalid packageName: " + packageName); return; } //begin:加入一個判斷條件 if (packageName.equals("你的進程名")) { return; } //end: 加入一個判斷條件 forceStopPackageLocked(packageName, pkgUid); } } finally { Binder.restoreCallingIdentity(callingId); } }
這樣的話在任務管理器裏能夠保證KISS不掉的;
還有在這個方法上還有個方法clearApplicationUserData中保證若是是該進程就不讓調用forceStopPackage()方法。
另:其餘方法:
1,首先在你的service的onDestory方法裏面寫上啓動你本身的代碼,爲何要寫這個?由於若是用戶是在設置->應用程序->正在運行服務這裏面殺掉你service的話會調用到onDestory方法的,這裏就能夠啓動了,
2:監聽屏幕關閉廣播,屏幕已關閉,就啓動服務。
3:監聽屏幕解鎖廣播,同樣的道理,這樣,基本上,你的service就達到永不中止了。對用戶來講有點變態,但不少軟件都這樣。
二10、EditText獲取焦點
  1. EditText.requestFoucus()
EditText.requestFoucus()
因爲收集內容較多,因此決定每20條分爲一篇文章。若有不便,敬請諒解!
查看其餘部分:

以上部分代碼是從別人博客摘抄而來,沒有指明出處抱歉。

相關文章
相關標籤/搜索