經常使用安卓開發技巧彙總

 

常常用的一些小技巧都會記錄在這邊html

 

 

API權限錯誤提示解決方法:

 

報這麼一個錯誤:java

 

  1. Call requires API level 11 (current min is 8): android.animation.ObjectAnimator#ofFloat  

 

主要緣由是 AndroidManifest.xml中的API權限等級不夠:linux

 

  1. <uses-sdk  
  2.        android:minSdkVersion="8"  
  3.        android:targetSdkVersion="17" />  

修改爲:

 

 

  1. <uses-sdk  
  2.     android:minSdkVersion="11"  
  3.     android:targetSdkVersion="17" />  


獲取手機號碼:android

 

  1. //建立電話管理  
  2.   
  3. TelephonyManager tm = (TelephonyManager)  
  4.   
  5. //與手機創建鏈接  
  6. activity.getSystemService(Context.TELEPHONY_SERVICE);  
  7.   
  8. //獲取手機號碼  
  9.   
  10. String phoneId = tm.getLine1Number();  
  11.   
  12. //記得在manifest file中添加  
  13.     <uses-permission  
  14. android:name="android.permission.READ_PHONE_STATE" />  
  15.   
  16. //程序在模擬器上沒法實現,必須鏈接手機  

 

格式化string.xml 中的字符串

  1. // in strings.xml..  
  2. <string name="my_text">Thanks for visiting %s. You age is %d!</string>  
  3.        
  4. // and in the java code:  
  5. String.format(getString(R.string.my_text), "oschina", 33);  

android設置全屏的方法

  1. requestWindowFeature(Window.FEATURE_NO_TITLE);  
  2. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
  3. WindowManager.LayoutParams.FLAG_FULLSCREEN);  

 

檢查當前網絡是否連上

 

 

  1. ConnectivityManager con=(ConnectivityManager)getSystemService(Activity.CONNECTIVITY_SERVICE);    
  2.    
  3. boolean wifi=con.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();    
  4.   
  5. boolean internet=con.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();   

在AndroidManifest.xml 增長權限:

 

 

  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  

 

 

檢測某個Intent是否有效

 

 

  1. public static boolean isIntentAvailable(Context context, String action) {  
  2.     final PackageManager packageManager = context.getPackageManager();  
  3.     final Intent intent = new Intent(action);  
  4.     List<ResolveInfo> list =  
  5.             packageManager.queryIntentActivities(intent,  
  6.                     PackageManager.MATCH_DEFAULT_ONLY);  
  7.     return list.size() > 0;  
  8. }  

 

android 撥打電話

 

 

  1. try {  
  2.    Intent intent = new Intent(Intent.ACTION_CALL);  
  3.    intent.setData(Uri.parse("tel:+110"));  
  4.    startActivity(intent);  
  5. catch (Exception e) {  
  6.    Log.e("SampleApp", "Failed to invoke call", e);  
  7. }  

 

android中發送Email

  1. Intent i = new Intent(Intent.ACTION_SEND);    
  2. //i.setType("text/plain"); //模擬器請使用這行  
  3. i.setType("message/rfc822") ; // 真機上使用這行  
  4. i.putExtra(Intent.EXTRA_EMAIL, new String[]{"test@gmail.com","test@163.com});    
  5. i.putExtra(Intent.EXTRA_SUBJECT,"subject goes here");    
  6. i.putExtra(Intent.EXTRA_TEXT,"body goes here");    
  7. startActivity(Intent.createChooser(i, "Select email application."));  

android中打開瀏覽器

  1. Intent viewIntent = new   
  2.     Intent("android.intent.action.VIEW",Uri.parse("http://vaiyanzi.cnblogs.com"));  
  3.   
  4. startActivity(viewIntent);  

android 獲取設備惟一標識碼

  1. String android_id = Secure.getString(getContext().getContentResolver(), Secure.ANDROID_ID);  

android中獲取IP地址

  1. public String getLocalIpAddress() {  
  2.     try {  
  3.         for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();   
  4.         en.hasMoreElements();) {  
  5.             NetworkInterface intf = en.nextElement();  
  6.             for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();   
  7.         enumIpAddr.hasMoreElements();) {  
  8.                 InetAddress inetAddress = enumIpAddr.nextElement();  
  9.                 if (!inetAddress.isLoopbackAddress()) {  
  10.                     return inetAddress.getHostAddress().toString();  
  11.                 }  
  12.             }  
  13.         }  
  14.     } catch (SocketException ex) {  
  15.         Log.e(LOG_TAG, ex.toString());  
  16.     }  
  17.     return null;  
  18. }  

android獲取存儲卡路徑以及使用狀況

  1. /** 獲取存儲卡路徑 */   
  2. File sdcardDir=Environment.getExternalStorageDirectory();   
  3. /** StatFs 看文件系統空間使用狀況 */   
  4. StatFs statFs=new StatFs(sdcardDir.getPath());   
  5. /** Block 的 size*/   
  6. Long blockSize=statFs.getBlockSize();   
  7. /** 總 Block 數量 */   
  8. Long totalBlocks=statFs.getBlockCount();   
  9. /** 已使用的 Block 數量 */   
  10. Long availableBlocks=statFs.getAvailableBlocks();   

android中添加新的聯繫人

  1. private Uri insertContact(Context context, String name, String phone) {  
  2.          
  3.        ContentValues values = new ContentValues();  
  4.        values.put(People.NAME, name);  
  5.        Uri uri = getContentResolver().insert(People.CONTENT_URI, values);  
  6.        Uri numberUri = Uri.withAppendedPath(uri, People.Phones.CONTENT_DIRECTORY);  
  7.        values.clear();  
  8.          
  9.        values.put(Contacts.Phones.TYPE, People.Phones.TYPE_MOBILE);  
  10.        values.put(People.NUMBER, phone);  
  11.        getContentResolver().insert(numberUri, values);  
  12.          
  13.        return uri;  
  14. }  

查看電池使用狀況

  1. Intent intentBatteryUsage = new Intent(Intent.ACTION_POWER_USAGE_SUMMARY);          
  2. startActivity(intentBatteryUsage);  

獲取進程號

  1. ActivityManager mActivityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);  
  2. List<ActivityManager.RunningAppProcessInfo> mRunningProcess = mActivityManager.getRunningAppProcesses();   
  3. int i = 1;   
  4. for (ActivityManager.RunningAppProcessInfo amProcess : mRunningProcess)   
  5. {   
  6. Log.e("homer Application", (i++) + "  PID = " + amProcess.pid + ";  
  7.  processName = " + amProcess.processName);  
  8.  }   


android 之setOutsideTouchable 

 

在使用彈出框但願點擊彈出框外的任意處讓彈出框消失,web

先把設置彈出框的setOutsideTouchable爲true,而後重寫onTouch。shell

  1. win = new PopupWindow(contentView, LayoutParams.FILL_PARENT,  
  2.                 LayoutParams.WRAP_CONTENT);  
  3. win.setOutsideTouchable(true);  
  4. win.setFocusable(true);  
  5.   
  6. // 點擊彈出窗口區域以外的任意區域,則該窗口關閉  
  7. win.setTouchInterceptor(new OnTouchListener() {  
  8.     @Override  
  9.     public boolean onTouch(View v, MotionEvent event) {  
  10.         if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {  
  11.             win.dismiss();  
  12.             return true;  
  13.         }  
  14.         return false;  
  15.     }  
  16. });  


 

android 獲取資源文件

 

 

  1. Resources myResources = getResources();  
  2.   
  3. String str = myResources.getString(R.string.app_name);  
  4. myResources.getDrawable(R.drawable.jhs_button1_h);  


打開播放器

 

  1. am start -a android.intent.action.VIEW -t video/* -d 'url地址'  

px轉pd

 

  1. private int getPixels(int dipValue) {  
  2.     Resources r = getResources();  
  3.     int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, r.getDisplayMetrics());  
  4.     return px;  
  5. }  

動態修改ImageView的長寬

 

  1. ImageView imageView = (ImageView) findViewById(R.id.videoImage1);  
  2. LayoutParams para = imageView.getLayoutParams();  
  3. para.height = getPixels(180);  
  4. para.width = getPixels(120);  
  5. imageView.setLayoutParams(para);  

動態設置padding

 

  1. ImageView imageView = new ImageView(this);    
  2. imageView.setPadding(5,5,5,5)    

 

動態設置margin

 

  1. //設置margin  
  2. LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,  
  3.         LinearLayout.LayoutParams.WRAP_CONTENT);  
  4. params.setMargins(0, getPixels(13), 0, 0);  

顯示網絡圖片

 

  1. public Bitmap returnBitMap(String url){    
  2.     URL myFileUrl = null;      
  3.     Bitmap bitmap = null;     
  4.     try {      
  5.         myFileUrl = new URL(url);      
  6.     } catch (MalformedURLException e) {      
  7.         e.printStackTrace();      
  8.     }      
  9.     try {      
  10.         HttpURLConnection conn = (HttpURLConnection) myFileUrl      
  11.           .openConnection();      
  12.         conn.setDoInput(true);      
  13.         conn.connect();      
  14.         InputStream is = conn.getInputStream();      
  15.         bitmap = BitmapFactory.decodeStream(is);      
  16.         is.close();      
  17.     } catch (IOException e) {      
  18.           e.printStackTrace();      
  19.     }      
  20.           return bitmap;      
  21. }      
  22.   
  23. :  
  24.     ImageView imageView = (ImageView) findViewById(R.id.imageView);   
  25.     String url = "http://www.baidu.com/img/bdlogo.gif";  
  26.     imageView.setImageBitmap(returnBitMap(url));    

刪除APK

 

  1. Uri uri =Uri.fromParts("package", strPackageName, null);    
  2. Intent it = newIntent(Intent.ACTION_DELETE, uri);     
  3. startActivity(it);  

 

安裝APK

 

  1. Uri installUri = Uri.fromParts("package","xxx", null);     
  2. returnIt = newIntent(Intent.ACTION_PACKAGE_ADDED, installUri);  


px和dp互轉

 

  1. public static int dip2px(Context context, float dipValue){  
  2.                 final float scale = context.getResources().getDisplayMetrics().density;  
  3.                 return (int)(dipValue * scale + 0.5f);  
  4.         }  
  5.          
  6.     public static int px2dip(Context context, float pxValue){  
  7.                 final float scale = context.getResources().getDisplayMetrics().density;  
  8.                 return (int)(pxValue / scale + 0.5f);  
  9.         }   

動態添加View

 

  1. ViewGroup viewGroup = (ViewGroup) getLayoutInflater().inflate(R.layout.main, null);  
  2. setContentView(viewGroup);  
  3. Button button = new Button(this);  
  4. button.setText("Heklki");  
  5. viewGroup.addView(button);  
  6.   
  7. Button button2 = new Button(this);  
  8. button.setText("Heklki2");  
  9. button.setPadding(100, 100, 100, 100);  
  10. viewGroup.addView(button2);  

自定義View中,佈局資源使用方法

 

  1. LayoutInflater i = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);  

include方法導入公用xml

 

  1. <include layout="@layout/test_f"/>  

 

也能夠帶上IDcanvas

 

  1. <include  
  2.       android:id="@+id/test2"  
  3.       android:layout_height="match_parent"  
  4.       android:layout_width="wrap_content"  
  5.       layout="@layout/test" />  

若是被導入的xml中,有merge標籤,則是合併進來,效率會更加高

 

 

  1. <merge xmlns:android="http://schemas.android.com/apk/res/android" >  
  2.   
  3.     <LinearLayout  
  4.         android:id="@+id/test"  
  5.         android:layout_width="wrap_content"  
  6.         android:layout_height="wrap_content"  
  7.         android:orientation="horizontal" >  
  8.   
  9.         <ImageView  
  10.             android:id="@+id/imageView1"  
  11.             android:layout_width="40dp"  
  12.             android:layout_height="40dp"  
  13.             android:layout_alignParentLeft="true"  
  14.             android:layout_alignParentTop="true"  
  15.             android:src="@drawable/ic_launcher" />  
  16.   
  17.         <Button  
  18.             android:id="@+id/button1"  
  19.             android:layout_width="wrap_content"  
  20.             android:layout_height="wrap_content"  
  21.             android:text="Button" />  
  22.     </LinearLayout>  
  23.   
  24. </merge>  


 

解決TableRow中沒法顯示ImageView的圖片問題

 

  1. LinearLayout layout = (LinearLayout)findViewById(R.id.a);  
  2.                   TableLayout tableLayout = new TableLayout(this);  
  3.                   LinearLayout layout1 = new LinearLayout(this);  
  4.                   TableRow row = new TableRow(this);  
  5.                   ImageView img = new ImageView(this);  
  6.                   Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/a.png");//從本地取圖片  
  7.                   img.setLayoutParams(new LayoutParams(100,100));  
  8.                   Drawable drawable = new BitmapDrawable(bitmap);  
  9.                   img.setImageDrawable(drawable);  
  10.                   img.setAlpha(255);  
  11.                   System.out.println(drawable);  
  12.                   System.out.println(img.getDrawable());  
  13.                   layout1.addView(img);  
  14.                   row.addView(layout1);  
  15.                   tableLayout.addView(row);                   
  16.                   layout.addView(tableLayout);  
row和imageView之間加上 linearLayout

 

ScrollView徹底禁止焦點點擊上去,須要在代碼中設置false

 

  1. //禁止焦點  
  2.  sc.setFocusable(false);  
  3.  sc.setFocusableInTouchMode(false);  

跨應用調用

 

  1. Intent intent = new Intent();  
  2.          intent.setClassName("com.xxx.xxx", "com.xxx.xxx.xxxIndex");  
  3.          startActivity(intent);  

 

XML中自定義焦點移動方向

 

  1.  <Button  
  2. style="@style/clockFaceNum"  
  3. android:text="11"  
  4. android:id="@+id/button11"  
  5. android:layout_below="@+id/button12"  
  6. android:layout_toLeftOf="@+id/button12"  
  7. android:nextFocusUp="@+id/button10"  
  8. android:nextFocusLeft="@+id/button10"  
  9. android:nextFocusRight="@+id/button12"  
  10. android:nextFocusDown="@+id/button12">  
  11. </Button>   

 

 

  1. View.setNextFocusDownId //設置向下焦點  
  2. View.setNextFocusLeftId //向左  
  3. View.setNextFocusUpId //設置向上  
  4. View.setNextFocusRightId //向右  


 

判斷EditView值爲空

 

  1. TextUtils.isEmpty(edit.getText()) //爲空的判斷  
  2. TextUtils.isEmpty(edit.getText().toString().trim()) //去掉空格  

接收短信代碼

 

  1. public class SMSReceiver extends BroadcastReceiver  
  2. {  
  3.        /*當收到短信時,就會觸發此方法*/  
  4.        public void onReceive(Context context, Intent intent)  
  5.       {  
  6.             Bundle bundle = intent.getExtras();  
  7.             Object messages[] = (Object[]) bundle.get( "pdus");  
  8.             SmsMessage smsMessage[] = new SmsMessage[messages.length];  
  9.              for (int n = 0; n < messages.length; n++)  
  10.             {  
  11.                   smsMessage[n] = SmsMessage.createFromPdu(( byte[]) messages[n]);  
  12.             }  
  13.              //產生一個Toast  
  14.             Toast toast = Toast.makeText(context, "短信內容: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG);  
  15.              //設置toast顯示的位置  
  16.              //toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 200);  
  17.              //顯示該Toast  
  18.             toast.show();  
  19.       }  
  20. }  

XML中須要添加:

 

 

  1. <receiver android:name=".SMSReceiver" android:enabled="true">   
  2.       <intent-filter>   
  3.            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>   
  4.       </intent-filter>   
  5.  </receiver>  

命令行經常使用命令

 

1. 啓動模擬器 android源碼目錄下 . build/envsetup.sh lunch 1 以後   emulator 便可啓動模擬器 
  2. 命令行下看log  emulator起來後,用 adb logcat 便可看輸出了,還能夠加其餘過濾選項   3. 命令行下安裝應用 adb install ....apk   4. 命令行下進shell adb shell
  5. 模擬事件,發短信,打電話等 telnet localhos 5554 以後help看幫助   6. adb shell中看服務 service list   7. 新增一個系統應用 eclipse下的工程文件夾copy到packages/apps/目錄下,增長Android.mk   LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_SRC_FILES += \         src/com/example/hellodroid/FullscreenActivity.java \         src/com/example/hellodroid/util/SystemUiHiderBase.java \         src/com/example/hellodroid/util/SystemUiHiderHoneycomb.java \         src/com/example/hellodroid/util/SystemUiHider.java
LOCAL_PACKAGE_NAME := HelloDroid LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
# Build the test package include $(call all-makefiles-under,$(LOCAL_PATH))    若是不想被打包安裝到system/app下,
  LOCAL_MODULE_TAGS := optional ----- LOCAL_MODULE_TAGS := tests 便可. 快速編譯的方法是 HelloDroid目錄下  mm 命令便可 
  8. 安裝apk錯誤類型   Failure [INSTALL_FAILED_DEXOPT] 表示沒找到DEX,這個通常是系統應用編譯後,直接裝apk形成的,解決辦法是:安裝未優化的包    adb install out\target\product\generic\obj\APPS\HelloDroid_intermediates> package.apk.unaligned Failure [INSTALL_FALIED_EXITS]
實際就是應用沒變,刪除 userdata.img便可 rm out/target/product/generic/userdata* -rf 
  Failure [INSTALL_FAILED_UID_CHANGED]
你之前安裝過這個應用程序,到/data/data下刪除完這個程序的包名對應的文件夾, 新安裝的會另外生成uid。 裝不上是由於檢查到原來/data/data下的文件對應uid仍是舊的  
9. 編譯目標可執行程序 Android.mk以下   #  # Copyright 2006 The Android Open Source Project # # Android Asset Packaging Tool #
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS)
LOCAL_SRC_FILES := \     nsurface.cpp
LOCAL_C_INCLUDES := \     $(LOCAL_PATH)/http://www.cnblogs.com/include/ui \     ${LOCAL_PATH}/http://www.cnblogs.com/include/utils \     ${LOCAL_PATH}/http://www.cnblogs.com/include/gui \     external/skia/include/core \     external/skia/include/utils
LOCAL_SHARED_LIBRARIES := \     libcutils \     libutils \     libui \     libgui \     libskia
LOCAL_MODULE := nsurface LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)      9. 快速編譯一個模塊   模塊目錄下 mm 
   10. 模擬器運行系統起不來
排除是修改錯誤以外,通常是userdata用戶數據不一致了 刪除userdata,重啓模擬器便可 rm out/target/product/generic/userdata* -rf 

經常使用字符串操做概括

 

  1. //打印加入變量名的字符串  
  2. int count = 5;  
  3. String text = String. format(getResources().getString(R.string.flip_view_apk_title),count); //這裏的count就是替換裏面的$d的值  
  4.   
  5. //找到count字符的位置並顯示跟整個字符串不一樣的顏色  
  6. String str = count + "";  
  7. int index = text.indexOf(str);  
  8. int charCount = str.length();  
  9. SpannableStringBuilder style= new SpannableStringBuilder(text);  
  10. int color = 0xffff00ff;  
  11. style.setSpan( new ForegroundColorSpan(color),index,index+charCount,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);        
  12. TestView.setText(style);   
  13.   
  14. //不一樣大小的字體  
  15. SpannableStringBuilder style = new SpannableStringBuilder(version);  
  16. style.setSpan( new AbsoluteSizeSpan(bigSize), 0, 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE );  
  17. style.setSpan( new AbsoluteSizeSpan(normalSize), 1, version.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);  
  18. verionNameView.setText(style);  
  19.   
  20. strings.xml設置  
  21. <string name="test_string">測試(%1$d個) </string>  
  22.   
  23. %1爲第一次設置引用的設置  
  24. $d爲顯示的變量格式,爲整型  
  25. $s爲字符串型  
  26. $c等等  
  27.   
  28.   
  29. //打印兩位數00  
  30. s = String.format("%02d", 1);              
  31. 格式化後s就是01  
  32.   
  33. //刪除線,中劃線  
  34. priceTextView.setText(Double.toString((6800 / 100.0)));  
  35. priceTextView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);//刪除線  
  36. priceTextView.getPaint().setAntiAlias(true);//解決畫到Bitmap上刪除線的字符矩齒的問題  
  37.   
  38. //打印小數點後兩位  
  39. DecimalFormat mDecimalFormat;  
  40. mDecimalFormat = new DecimalFormat("#####.00");  
  41. mDecimalFormat.format((Double)(2000/ 1000.0);  

獲取屏幕分辨率

  1. 1. String str = "";   
  2. 2.         DisplayMetrics dm = new DisplayMetrics();   
  3. 3. //      getWindowManager().getDefaultDisplay().getMetrics(dm);   
  4. 4.         dm = this.getApplicationContext().getResources().getDisplayMetrics();   
  5. 5.         int screenWidth = dm.widthPixels;   
  6. 6.         int screenHeight = dm.heightPixels;   
  7. 7.         float density = dm.density;   
  8. 8.         float xdpi = dm.xdpi;   
  9. 9.         float ydpi = dm.ydpi;   
  10. 10.         str += "屏幕分辨率爲:" + dm.widthPixels + " * " + dm.heightPixels + "\n";   
  11. 11.         str += "絕對寬度:" + String.valueOf(screenWidth) + "pixels\n";   
  12. 12.         str += "絕對高度:" + String.valueOf(screenHeight)   
  13. 13.                 + "pixels\n";   
  14. 14.         str += "邏輯密度:" + String.valueOf(density)   
  15. 15.                 + "\n";   
  16. 16.         str += "X 維 :" + String.valueOf(xdpi) + "像素每英尺\n";   
  17. 17.         str += "Y 維 :" + String.valueOf(ydpi) + "像素每英尺\n";   
  18. 18.         Log.i("1", str);   

使用代碼畫.9圖

 

  1. NinePatchDrawable bg = (NinePatchDrawable)mContext.getResources().getDrawable(R.drawable.item_bg);  
  2. bg.setBoundsint left, int top, int right, int bottom;  
  3. bg.draw(canvas);  

 

防止應用掛後臺後會再次啓動新的應用

 

  1. 在應用的第一個activity的oncreate裏面加入:  
  2. //當前activity爲首頁, 若是他前面還有其餘的activity,說明用戶按過home鍵  
  3.         //則無需跑初始化的界面邏輯  
  4.         ActivityManager am = (ActivityManager) getSystemService( ACTIVITY_SERVICE);  
  5.         List<ActivityManager.RunningTaskInfo> tasklist = am.getRunningTasks(1);  
  6.         ActivityManager.RunningTaskInfo runTask = tasklist.get(0);  
  7.         int  n = runTask.numActivities ;  
  8.         if (n != 1) {  
  9.            finish();  
  10.            return ;  
  11.         }  

使用自定義字體

 

  1. // 獲得TextView控件對象  
  2. TextView textView = (TextView) findViewById(R.id.custom);  
  3. // 將字體文件保存在assets/fonts/目錄下,www.linuxidc.com建立Typeface對象  
  4. Typeface typeFace = Typeface.createFromAsset(getAssets(),"fonts/DroidSansThai.ttf");  
  5. // 應用字體  
  6. textView.setTypeface(typeFace);  

Intent幾種用法總結

顯示網頁:瀏覽器

  1. Uri uri = Uri.parse("http://www.google.com");
  2. Intent it  = new Intent(Intent.ACTION_VIEW,uri);
  3. startActivity(it);
顯示地圖:
  1. Uri uri = Uri.parse("geo:38.899533,-77.036476");
  2. Intent it = new Intent(Intent.Action_VIEW,uri);
  3. startActivity(it);
路徑規劃:
  1. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
  2. Intent it = new Intent(Intent.ACTION_VIEW,URI);
  3. startActivity(it);
撥打電話: 調用撥號程序
  1. Uri uri = Uri.parse("tel:xxxxxx");
  2. Intent it = new Intent(Intent.ACTION_DIAL, uri);  
  3. startActivity(it);  
  1. Uri uri = Uri.parse("tel.xxxxxx");
  2. Intent it =new Intent(Intent.ACTION_CALL,uri);
  3. 要使用這個必須在配置文件中加入<uses-permission id="android.permission.CALL_PHONE" />
發送SMS/MMS 調用發送短信的程序
  1. Intent it = new Intent(Intent.ACTION_VIEW);   
  2. it.putExtra("sms_body", "The SMS text");   
  3. it.setType("vnd.android-dir/mms-sms");   
  4. startActivity(it);  
發送短信
  1. Uri uri = Uri.parse("smsto:0800000123");   
  2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
  3. it.putExtra("sms_body", "The SMS text");   
  4. startActivity(it);  
發送彩信
  1. Uri uri = Uri.parse("content://media/external/images/media/23");   
  2. Intent it = new Intent(Intent.ACTION_SEND);   
  3. it.putExtra("sms_body", "some text");   
  4. it.putExtra(Intent.EXTRA_STREAM, uri);   
  5. it.setType("image/png");   
  6. startActivity(it);
發送Email
  1. Uri uri = Uri.parse("mailto:xxx@abc.com");
  2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
  3. startActivity(it);
  1. Intent it = new Intent(Intent.ACTION_SEND);   
  2. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");   
  3. it.putExtra(Intent.EXTRA_TEXT, "The email body text");   
  4. it.setType("text/plain");   
  5. startActivity(Intent.createChooser(it, "Choose Email Client"));  
  1. Intent it=new Intent(Intent.ACTION_SEND);     
  2. String[] tos={"me@abc.com"};     
  3. String[] ccs={"you@abc.com"};     
  4. it.putExtra(Intent.EXTRA_EMAIL, tos);     
  5. it.putExtra(Intent.EXTRA_CC, ccs);     
  6. it.putExtra(Intent.EXTRA_TEXT, "The email body text");     
  7. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");     
  8. it.setType("message/rfc822");     
  9. startActivity(Intent.createChooser(it, "Choose Email Client"));   
添加附件
  1. Intent it = new Intent(Intent.ACTION_SEND);   
  2. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");   
  3. it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");   
  4. sendIntent.setType("audio/mp3");   
  5. startActivity(Intent.createChooser(it, "Choose Email Client"));
播放多媒體
  1.   
  2. Intent it = new Intent(Intent.ACTION_VIEW);
  3. Uri uri = Uri.parse("file:///sdcard/song.mp3");
  4. it.setDataAndType(uri, "audio/mp3");
  5. startActivity(it);
  1. Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");   
  2. Intent it = new Intent(Intent.ACTION_VIEW, uri);   
  3. startActivity(it);  
Uninstall 程序
  1. Uri uri = Uri.fromParts("package", strPackageName, null);   
  2. Intent it = new Intent(Intent.ACTION_DELETE, uri);   
  3. startActivity(it);

 

 

跨應用調用

 

  1. @Override  
  2.   public void onClick(View v) {  
  3.       Intent intent = new Intent();  
  4.       intent.setAction(Intent.ACTION_VIEW);  
  5.       intent.setData(Uri.parse("xxx://list"));  
  6.       intent.putExtra("isShowShoppingCart", "true");  
  7.       startActivity(intent);  
  8.   }  
被調用的應用中,xml配置
  1. <activity android:name=".activity.StartActivity" >  
  2.            <intent-filter>    
  3.               <action android:name="android.intent.action.VIEW"></action>    
  4.               <category android:name="android.intent.category.DEFAULT"/>  
  5.               <data android:scheme="xxx" android:host="list"/>  
  6.           </intent-filter>   
  7.       </activity>  

Activity配置獨立進程

這樣配置以後,這個Activity就會造成一個單獨的進程,進程名稱例如:xxx.xx.xxx:DetailActivity網絡

通常將邏輯上一塊兒運行的組件配置在一個進程中。若是邏輯上有必定分離的,能夠新開一個進程。這樣能夠下降主進程的空間和時間開銷app

  1. <activity android:name=".activity.detail.DetailActivity"   
  2.             android:process=":DetailActivity">  
  3.         </activity>  

ADB命令

 安裝軟件   adb install apk文件名稱.apk           從新安裝該軟件   adb install -r apk文件名稱.apk

  卸載apk軟件   adb uninstall apk包名.apk

  查看手機上的運行日誌,此項能夠用來查錯   adb logcat

  查看手機是否鏈接,以及鏈接了幾臺手機   adb devices

  A爲手機路徑,B爲電腦路徑,意思爲:把文件從手機中複製到電腦上   adb pull <A> <B>           A爲手機路徑,B爲電腦路徑,意思爲:把文件從電腦複製到手機上   adb push <B> <A>

  進入手機的超級終端Terminal   adb shell

  從新掛載文件系統   adb remount

  重啓手機   adb reboot           重啓到Recovery界面   adb reboot recovery           重啓到bootloader界面   adb reboot bootloader

  例子:刷官方高版本後從新獲取ROOT和降級方法(部份操做)

  進行adb運行環境   adb shell

  設置超級用戶模式   su

  映射出目錄   mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system

  退出su   exit

  退出shell準備接受下一個adb命令   exit

  增長flash_image文件到手機上   adb push flash_image.zip /system/bin/flash_image

  recovery先複製到卡上   adb push recovery-RA-heroc-v1.6.2.img /sdcard

  再次進入adb環境   adb shell

  修改文件屬性   chmod 0755 /system/bin/flash_image

  重啓系統   reboot


 

 

am啓動一個應用

 

  1. am start -n com.xx.xx/com.xx.xx.activity.WelcomeActivity  

畫一個View對象

  1. CategoryTitleView goodTitleView = new CategoryTitleView(mContext, null);  
  2. Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);  
  3. Canvas canvas2 = new Canvas(bitmap);  
  4. goodTitleView.setView(mItemData);  
  5. goodTitleView.measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));  
  6. goodTitleView.layout(0, 0, getWidth(), getHeight());  
  7. goodTitleView.draw(canvas2);  
  8. canvas.drawBitmap(bitmap, 0, 0, null);  

drawBitmap 使用

 

  1. //    GameView.drawImage(canvas, mBitDestTop, miDTX, mBitQQ.getHeight(), mBitDestTop.getWidth(), mBitDestTop.getHeight()/2, 0, 0);  
  2.     public static void drawImage(Canvas canvas, Bitmap blt, int x, int y, int w, int h, int bx, int by)  
  3.     {                                                        //x,y表示繪畫的起點,  
  4.         Rect src = new Rect();// 圖片  
  5.         Rect dst = new Rect();// 屏幕位置及尺寸  
  6.         //src 這個是表示繪畫圖片的大小  
  7.         src.left = bx;   //0,0    
  8.         src.top = by;  
  9.         src.right = bx + w;// mBitDestTop.getWidth();,這個是桌面圖的寬度,  
  10.         src.bottom = by + h;//mBitDestTop.getHeight()/2;// 這個是桌面圖的高度的一半  
  11.         // 下面的 dst 是表示 繪畫這個圖片的位置  
  12.         dst.left = x;    //miDTX,//這個是能夠改變的,也就是繪圖的起點X位置  
  13.         dst.top = y;    //mBitQQ.getHeight();//這個是QQ圖片的高度。 也就至關於 桌面圖片繪畫起點的Y座標  
  14.         dst.right = x + w;    //miDTX + mBitDestTop.getWidth();// 表示需繪畫的圖片的右上角  
  15.         dst.bottom = y + h;    // mBitQQ.getHeight() + mBitDestTop.getHeight();//表示需繪畫的圖片的右下角  
  16.         canvas.drawBitmap(blt, src, dst, null);//這個方法  第一個參數是圖片原來的大小,第二個參數是 繪畫該圖片需顯示多少。也就是說你想繪畫該圖片的某一些地方,而不是所有圖片,第三個參數表示該圖片繪畫的位置  
  17.           
  18.         src = null;  
  19.         dst = null;  
  20.     }  

 

 

 

動態設置左右圖標

 

 

  1. Drawable img_on, img_off;  
  2. Resources res = getResources();  
  3. img_off = res.getDrawable(R.drawable.btn_strip_mark_off);  
  4. //調用setCompoundDrawables時,必須調用Drawable.setBounds()方法,不然圖片不顯示  
  5. img_off.setBounds(0, 0, img_off.getMinimumWidth(), img_off.getMinimumHeight());  
  6. btn.setCompoundDrawables(img_off, null, null, null); //設置左圖標  
相關文章
相關標籤/搜索