生活随笔
收集整理的這篇文章主要介紹了
常用安卓开发技巧汇总
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
經常用的一些小技巧都會記錄在這邊
?
?
API權限錯誤提示解決方法:
?
報這么一個錯誤:
?
Call?requires?API?level?11?(current?min?is?8):?android.animation.ObjectAnimator#ofFloat?? ?
主要原因是 AndroidManifest.xml中的API權限等級不夠:
?
<uses-sdk?????????android:minSdkVersion="8"?????????android:targetSdkVersion="17"?/>?? 修改成: ?
?
<uses-sdk??????android:minSdkVersion="11"??????android:targetSdkVersion="17"?/>??
獲取手機號碼:
?
??TelephonyManager?tm?=?(TelephonyManager)????activity.getSystemService(Context.TELEPHONY_SERVICE);??????String?phoneId?=?tm.getLine1Number();????????<uses-permission??android:name="android.permission.READ_PHONE_STATE"?/>????
?
格式化string.xml 中的字符串
<string?name="my_text">Thanks?for?visiting?%s.?You?age?is?%d!</string>?????????String.format(getString(R.string.my_text),?"oschina",?33);??
android設置全屏的方法
requestWindowFeature(Window.FEATURE_NO_TITLE);??getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,??WindowManager.LayoutParams.FLAG_FULLSCREEN);??
?
檢查當前網絡是否連上
?
?
ConnectivityManager?con=(ConnectivityManager)getSystemService(Activity.CONNECTIVITY_SERVICE);???????boolean?wifi=con.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();??????boolean?internet=con.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();???
在AndroidManifest.xml 增加權限: ?
?
<uses-permission?android:name="android.permission.ACCESS_NETWORK_STATE"?/>??
?
?
檢測某個Intent是否有效
?
?
public?static?boolean?isIntentAvailable(Context?context,?String?action)?{??????final?PackageManager?packageManager?=?context.getPackageManager();??????final?Intent?intent?=?new?Intent(action);??????List<ResolveInfo>?list?=??????????????packageManager.queryIntentActivities(intent,??????????????????????PackageManager.MATCH_DEFAULT_ONLY);??????return?list.size()?>?0;??}??
?
android 撥打電話
?
?
try?{?????Intent?intent?=?new?Intent(Intent.ACTION_CALL);?????intent.setData(Uri.parse("tel:+110"));?????startActivity(intent);??}?catch?(Exception?e)?{?????Log.e("SampleApp",?"Failed?to?invoke?call",?e);??}??
?
android中發送Email
Intent?i?=?new?Intent(Intent.ACTION_SEND);????i.setType("message/rfc822")?;?i.putExtra(Intent.EXTRA_EMAIL,?new?String[]{"test@gmail.com","test@163.com});????i.putExtra(Intent.EXTRA_SUBJECT,"subject?goes?here");????i.putExtra(Intent.EXTRA_TEXT,"body?goes?here");????startActivity(Intent.createChooser(i,?"Select?email?application."));??
android中打開瀏覽器
Intent?viewIntent?=?new???????Intent("android.intent.action.VIEW",Uri.parse("http://vaiyanzi.cnblogs.com"));????startActivity(viewIntent);??
android 獲取設備唯一標識碼
String?android_id?=?Secure.getString(getContext().getContentResolver(),?Secure.ANDROID_ID);??
android中獲取IP地址
public?String?getLocalIpAddress()?{??????try?{??????????for?(Enumeration<NetworkInterface>?en?=?NetworkInterface.getNetworkInterfaces();???????????en.hasMoreElements();)?{??????????????NetworkInterface?intf?=?en.nextElement();??????????????for?(Enumeration<InetAddress>?enumIpAddr?=?intf.getInetAddresses();???????????enumIpAddr.hasMoreElements();)?{??????????????????InetAddress?inetAddress?=?enumIpAddr.nextElement();??????????????????if?(!inetAddress.isLoopbackAddress())?{??????????????????????return?inetAddress.getHostAddress().toString();??????????????????}??????????????}??????????}??????}?catch?(SocketException?ex)?{??????????Log.e(LOG_TAG,?ex.toString());??????}??????return?null;??}??
android獲取存儲卡路徑以及使用情況
File?sdcardDir=Environment.getExternalStorageDirectory();???StatFs?statFs=new?StatFs(sdcardDir.getPath());???Long?blockSize=statFs.getBlockSize();???Long?totalBlocks=statFs.getBlockCount();???Long?availableBlocks=statFs.getAvailableBlocks();???
android中添加新的聯系人
private?Uri?insertContact(Context?context,?String?name,?String?phone)?{??????????????????ContentValues?values?=?new?ContentValues();?????????values.put(People.NAME,?name);?????????Uri?uri?=?getContentResolver().insert(People.CONTENT_URI,?values);?????????Uri?numberUri?=?Uri.withAppendedPath(uri,?People.Phones.CONTENT_DIRECTORY);?????????values.clear();??????????????????values.put(Contacts.Phones.TYPE,?People.Phones.TYPE_MOBILE);?????????values.put(People.NUMBER,?phone);?????????getContentResolver().insert(numberUri,?values);??????????????????return?uri;??}??
查看電池使用情況
Intent?intentBatteryUsage?=?new?Intent(Intent.ACTION_POWER_USAGE_SUMMARY);??????????startActivity(intentBatteryUsage);??
獲取進程號
ActivityManager?mActivityManager?=?(ActivityManager)?this.getSystemService(ACTIVITY_SERVICE);??List<ActivityManager.RunningAppProcessInfo>?mRunningProcess?=?mActivityManager.getRunningAppProcesses();???int?i?=?1;???for?(ActivityManager.RunningAppProcessInfo?amProcess?:?mRunningProcess)???{???Log.e("homer?Application",?(i++)?+?"??PID?=?"?+?amProcess.pid?+?";???processName?=?"?+?amProcess.processName);???}???
android 之setOutsideTouchable?
?
在使用彈出框希望點擊彈出框外的任意處讓彈出框消失,
先把設置彈出框的setOutsideTouchable為true,然后重寫onTouch。
win?=?new?PopupWindow(contentView,?LayoutParams.FILL_PARENT,??????????????????LayoutParams.WRAP_CONTENT);??win.setOutsideTouchable(true);??win.setFocusable(true);????win.setTouchInterceptor(new?OnTouchListener()?{??????@Override??????public?boolean?onTouch(View?v,?MotionEvent?event)?{??????????if?(event.getAction()?==?MotionEvent.ACTION_OUTSIDE)?{??????????????win.dismiss();??????????????return?true;??????????}??????????return?false;??????}??});??
?
android 獲取資源文件
?
?
Resources?myResources?=?getResources();????String?str?=?myResources.getString(R.string.app_name);??myResources.getDrawable(R.drawable.jhs_button1_h);??
打開播放器
?
am?start?-a?android.intent.action.VIEW?-t?video/*?-d?'url地址'??
px轉pd
?
private?int?getPixels(int?dipValue)?{??????Resources?r?=?getResources();??????int?px?=?(int)?TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,?dipValue,?r.getDisplayMetrics());??????return?px;??}??
動態修改ImageView的長寬
?
ImageView?imageView?=?(ImageView)?findViewById(R.id.videoImage1);??LayoutParams?para?=?imageView.getLayoutParams();??para.height?=?getPixels(180);??para.width?=?getPixels(120);??imageView.setLayoutParams(para);?? 動態設置padding
?
ImageView?imageView?=?new?ImageView(this);????imageView.setPadding(5,5,5,5)????
?
動態設置margin
?
LinearLayout.LayoutParams?params?=?new?LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,??????????LinearLayout.LayoutParams.WRAP_CONTENT);??params.setMargins(0,?getPixels(13),?0,?0);??
顯示網絡圖片
?
public?Bitmap?returnBitMap(String?url){????????URL?myFileUrl?=?null;??????????Bitmap?bitmap?=?null;?????????try?{??????????????myFileUrl?=?new?URL(url);??????????}?catch?(MalformedURLException?e)?{??????????????e.printStackTrace();??????????}??????????try?{??????????????HttpURLConnection?conn?=?(HttpURLConnection)?myFileUrl????????????????.openConnection();??????????????conn.setDoInput(true);??????????????conn.connect();??????????????InputStream?is?=?conn.getInputStream();??????????????bitmap?=?BitmapFactory.decodeStream(is);??????????????is.close();??????????}?catch?(IOException?e)?{????????????????e.printStackTrace();??????????}????????????????return?bitmap;??????}????????:??????ImageView?imageView?=?(ImageView)?findViewById(R.id.imageView);???????String?url?=?"http://www.baidu.com/img/bdlogo.gif";??????imageView.setImageBitmap(returnBitMap(url));????
刪除APK
?
Uri?uri?=Uri.fromParts("package",?strPackageName,?null);????Intent?it?=?newIntent(Intent.ACTION_DELETE,?uri);?????startActivity(it);??
?
安裝APK
?
Uri?installUri?=?Uri.fromParts("package","xxx",?null);?????returnIt?=?newIntent(Intent.ACTION_PACKAGE_ADDED,?installUri);??
px和dp互轉
?
public?static?int?dip2px(Context?context,?float?dipValue){??????????????????final?float?scale?=?context.getResources().getDisplayMetrics().density;??????????????????return?(int)(dipValue?*?scale?+?0.5f);??????????}???????????????public?static?int?px2dip(Context?context,?float?pxValue){??????????????????final?float?scale?=?context.getResources().getDisplayMetrics().density;??????????????????return?(int)(pxValue?/?scale?+?0.5f);??????????}???
動態添加View
?
ViewGroup?viewGroup?=?(ViewGroup)?getLayoutInflater().inflate(R.layout.main,?null);??setContentView(viewGroup);??Button?button?=?new?Button(this);??button.setText("Heklki");??viewGroup.addView(button);????Button?button2?=?new?Button(this);??button.setText("Heklki2");??button.setPadding(100,?100,?100,?100);??viewGroup.addView(button2);?? 自定義View中,布局資源使用方法
?
LayoutInflater?i?=?(LayoutInflater)?getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);??
include方法導入公用xml
?
<include?layout="@layout/test_f"/>?? ?
也可以帶上ID
?
<include????????android:id="@+id/test2"????????android:layout_height="match_parent"????????android:layout_width="wrap_content"????????layout="@layout/test"?/>??
如果被導入的xml中,有merge標簽,則是合并進來,效率會更加高 ?
?
<merge?xmlns:android="http://schemas.android.com/apk/res/android"?>????????<LinearLayout??????????android:id="@+id/test"??????????android:layout_width="wrap_content"??????????android:layout_height="wrap_content"??????????android:orientation="horizontal"?>????????????<ImageView??????????????android:id="@+id/imageView1"??????????????android:layout_width="40dp"??????????????android:layout_height="40dp"??????????????android:layout_alignParentLeft="true"??????????????android:layout_alignParentTop="true"??????????????android:src="@drawable/ic_launcher"?/>????????????<Button??????????????android:id="@+id/button1"??????????????android:layout_width="wrap_content"??????????????android:layout_height="wrap_content"??????????????android:text="Button"?/>??????</LinearLayout>????</merge>??
?
解決TableRow中無法顯示ImageView的圖片問題
?
LinearLayout?layout?=?(LinearLayout)findViewById(R.id.a);????????????????????TableLayout?tableLayout?=?new?TableLayout(this);????????????????????LinearLayout?layout1?=?new?LinearLayout(this);????????????????????TableRow?row?=?new?TableRow(this);????????????????????ImageView?img?=?new?ImageView(this);????????????????????Bitmap?bitmap?=?BitmapFactory.decodeFile("/sdcard/a.png");??????????????????img.setLayoutParams(new?LayoutParams(100,100));????????????????????Drawable?drawable?=?new?BitmapDrawable(bitmap);????????????????????img.setImageDrawable(drawable);????????????????????img.setAlpha(255);????????????????????System.out.println(drawable);????????????????????System.out.println(img.getDrawable());????????????????????layout1.addView(img);????????????????????row.addView(layout1);????????????????????tableLayout.addView(row);?????????????????????????????????????layout.addView(tableLayout);?? row和imageView之間加上 linearLayout ?
ScrollView完全禁止焦點點擊上去,需要在代碼中設置false
?
?sc.setFocusable(false);???sc.setFocusableInTouchMode(false);??
跨應用調用
?
Intent?intent?=?new?Intent();???????????intent.setClassName("com.xxx.xxx",?"com.xxx.xxx.xxxIndex");???????????startActivity(intent);??
?
XML中自定義焦點移動方向
?
?<Button??style="@style/clockFaceNum"??android:text="11"??android:id="@+id/button11"??android:layout_below="@+id/button12"??android:layout_toLeftOf="@+id/button12"??android:nextFocusUp="@+id/button10"??android:nextFocusLeft="@+id/button10"??android:nextFocusRight="@+id/button12"??android:nextFocusDown="@+id/button12">??</Button>??? ?
?
View.setNextFocusDownId?View.setNextFocusLeftId?View.setNextFocusUpId?View.setNextFocusRightId?
?
判斷EditView值為空
?
TextUtils.isEmpty(edit.getText())?TextUtils.isEmpty(edit.getText().toString().trim())?
接收短信代碼
?
public?class?SMSReceiver?extends?BroadcastReceiver??{????????????????public?void?onReceive(Context?context,?Intent?intent)????????{??????????????Bundle?bundle?=?intent.getExtras();??????????????Object?messages[]?=?(Object[])?bundle.get(?"pdus");??????????????SmsMessage?smsMessage[]?=?new?SmsMessage[messages.length];???????????????for?(int?n?=?0;?n?<?messages.length;?n++)??????????????{????????????????????smsMessage[n]?=?SmsMessage.createFromPdu((?byte[])?messages[n]);??????????????}???????????????????????????Toast?toast?=?Toast.makeText(context,?"短信內容:?"?+?smsMessage[0].getMessageBody(),?Toast.LENGTH_LONG);?????????????????????????????????????????????????????toast.show();????????}??}??
XML中需要添加: ?
?
<receiver?android:name=".SMSReceiver"?android:enabled="true">?????????<intent-filter>??????????????<action?android:name="android.provider.Telephony.SMS_RECEIVED"/>?????????</intent-filter>????</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? 常用字符串操作歸納
?
//打印加入變量名的字符串??int?count?=?5;??String?text?=?String.?format(getResources().getString(R.string.flip_view_apk_title),count);?//這里的count就是替換里面的$d的值????//找到count字符的位置并顯示跟整個字符串不同的顏色??String?str?=?count?+?"";??int?index?=?text.indexOf(str);??int?charCount?=?str.length();??SpannableStringBuilder?style=?new?SpannableStringBuilder(text);??int?color?=?0xffff00ff;??style.setSpan(?new?ForegroundColorSpan(color),index,index+charCount,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);????????TestView.setText(style);?????//不同大小的字體??SpannableStringBuilder?style?=?new?SpannableStringBuilder(version);??style.setSpan(?new?AbsoluteSizeSpan(bigSize),?0,?1,?Spannable.SPAN_EXCLUSIVE_INCLUSIVE?);??style.setSpan(?new?AbsoluteSizeSpan(normalSize),?1,?version.length(),?Spannable.SPAN_EXCLUSIVE_INCLUSIVE);??verionNameView.setText(style);????strings.xml設置??<string?name="test_string">測試(%1$d個)?</string>????%1為第一次設置引用的設置??$d為顯示的變量格式,為整型??$s為字符串型??$c等等??????//打印兩位數00??s?=?String.format("%02d",?1);??????????????格式化后s就是01????//刪除線,中劃線??priceTextView.setText(Double.toString((6800?/?100.0)));??priceTextView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);//刪除線??priceTextView.getPaint().setAntiAlias(true);//解決畫到Bitmap上刪除線的字符矩齒的問題????//打印小數點后兩位??DecimalFormat?mDecimalFormat;??mDecimalFormat?=?new?DecimalFormat("#####.00");??mDecimalFormat.format((Double)(2000/?1000.0);?? 獲取屏幕分辨率
1.?String?str?=?"";???2.?????????DisplayMetrics?dm?=?new?DisplayMetrics();???3.?4.?????????dm?=?this.getApplicationContext().getResources().getDisplayMetrics();???5.?????????int?screenWidth?=?dm.widthPixels;???6.?????????int?screenHeight?=?dm.heightPixels;???7.?????????float?density?=?dm.density;???8.?????????float?xdpi?=?dm.xdpi;???9.?????????float?ydpi?=?dm.ydpi;???10.?????????str?+=?"屏幕分辨率為:"?+?dm.widthPixels?+?"?*?"?+?dm.heightPixels?+?"\n";???11.?????????str?+=?"絕對寬度:"?+?String.valueOf(screenWidth)?+?"pixels\n";???12.?????????str?+=?"絕對高度:"?+?String.valueOf(screenHeight)???13.?????????????????+?"pixels\n";???14.?????????str?+=?"邏輯密度:"?+?String.valueOf(density)???15.?????????????????+?"\n";???16.?????????str?+=?"X?維?:"?+?String.valueOf(xdpi)?+?"像素每英尺\n";???17.?????????str?+=?"Y?維?:"?+?String.valueOf(ydpi)?+?"像素每英尺\n";???18.?????????Log.i("1",?str);??? 使用代碼畫.9圖
?
NinePatchDrawable?bg?=?(NinePatchDrawable)mContext.getResources().getDrawable(R.drawable.item_bg);??bg.setBoundsint?left,?int?top,?int?right,?int?bottom;??bg.draw(canvas);?? ?
防止應用掛后臺后會再次啟動新的應用
?
在應用的第一個activity的oncreate里面加入:??????????????????ActivityManager?am?=?(ActivityManager)?getSystemService(?ACTIVITY_SERVICE);??????????List<ActivityManager.RunningTaskInfo>?tasklist?=?am.getRunningTasks(1);??????????ActivityManager.RunningTaskInfo?runTask?=?tasklist.get(0);??????????int??n?=?runTask.numActivities?;??????????if?(n?!=?1)?{?????????????finish();?????????????return?;??????????}?? 使用自定義字體
?
TextView?textView?=?(TextView)?findViewById(R.id.custom);??Typeface?typeFace?=?Typeface.createFromAsset(getAssets(),"fonts/DroidSansThai.ttf");??textView.setTypeface(typeFace);?? Intent幾種用法總結
顯示網頁:
Uri uri = Uri.parse("http://www.google.com");Intent it??= new Intent(Intent.ACTION_VIEW,uri);startActivity(it); 顯示地圖: Uri uri = Uri.parse("geo:38.899533,-77.036476");Intent it = new Intent(Intent.Action_VIEW,uri);startActivity(it); 路徑規劃: Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");Intent it = new Intent(Intent.ACTION_VIEW,URI);startActivity(it); 撥打電話: 調用撥號程序 Uri uri = Uri.parse("tel:xxxxxx");Intent it = new Intent(Intent.ACTION_DIAL, uri);??startActivity(it);?? Uri uri = Uri.parse("tel.xxxxxx");Intent it =new Intent(Intent.ACTION_CALL,uri);要使用這個必須在配置文件中加入<uses-permission id="android.permission.CALL_PHONE" /> 發送SMS/MMS 調用發送短信的程序 Intent it = new Intent(Intent.ACTION_VIEW);? ?it.putExtra("sms_body", "The SMS text");? ?it.setType("vnd.android-dir/mms-sms");? ?startActivity(it);?? 發送短信 Uri uri = Uri.parse("smsto:0800000123");? ?Intent it = new Intent(Intent.ACTION_SENDTO, uri);? ?it.putExtra("sms_body", "The SMS text");? ?startActivity(it);?? 發送彩信 Uri uri = Uri.parse("content://media/external/images/media/23");? ?Intent it = new Intent(Intent.ACTION_SEND);? ?it.putExtra("sms_body", "some text");? ?it.putExtra(Intent.EXTRA_STREAM, uri);? ?it.setType("image/png");? ?startActivity(it); 發送Email Uri uri = Uri.parse("mailto:xxx@abc.com");Intent it = new Intent(Intent.ACTION_SENDTO, uri);startActivity(it); Intent it = new Intent(Intent.ACTION_SEND);? ?it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");? ?it.putExtra(Intent.EXTRA_TEXT, "The email body text");? ?it.setType("text/plain");? ?startActivity(Intent.createChooser(it, "Choose Email Client"));?? Intent it=new Intent(Intent.ACTION_SEND);? ???String[] tos={"me@abc.com"};? ???String[] ccs={"you@abc.com"};? ???it.putExtra(Intent.EXTRA_EMAIL, tos);? ???it.putExtra(Intent.EXTRA_CC, ccs);? ???it.putExtra(Intent.EXTRA_TEXT, "The email body text");? ???it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");? ???it.setType("message/rfc822");? ???startActivity(Intent.createChooser(it, "Choose Email Client"));? ? 添加附件 Intent it = new Intent(Intent.ACTION_SEND);? ?it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");? ?it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");? ?sendIntent.setType("audio/mp3");? ?startActivity(Intent.createChooser(it, "Choose Email Client")); 播放多媒體 ??Intent it = new Intent(Intent.ACTION_VIEW);Uri uri = Uri.parse("file:///sdcard/song.mp3");it.setDataAndType(uri, "audio/mp3");startActivity(it); Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");? ?Intent it = new Intent(Intent.ACTION_VIEW, uri);? ?startActivity(it);?? Uninstall 程序 Uri uri = Uri.fromParts("package", strPackageName, null);? ?Intent it = new Intent(Intent.ACTION_DELETE, uri);? ?startActivity(it); ?
?
跨應用調用
?
@Override????public?void?onClick(View?v)?{????????Intent?intent?=?new?Intent();????????intent.setAction(Intent.ACTION_VIEW);????????intent.setData(Uri.parse("xxx://list"));????????intent.putExtra("isShowShoppingCart",?"true");????????startActivity(intent);????}?? 被調用的應用中,xml配置 <activity?android:name=".activity.StartActivity"?>?????????????<intent-filter>??????????????????<action?android:name="android.intent.action.VIEW"></action>??????????????????<category?android:name="android.intent.category.DEFAULT"/>????????????????<data?android:scheme="xxx"?android:host="list"/>????????????</intent-filter>?????????</activity>?? Activity配置獨立進程
這樣配置之后,這個Activity就會形成一個單獨的進程,進程名稱例如:xxx.xx.xxx:DetailActivity
一般將邏輯上一起運行的組件配置在一個進程中。如果邏輯上有一定分離的,可以新開一個進程。這樣可以降低主進程的空間和時間開銷
<activity?android:name=".activity.detail.DetailActivity"???????????????android:process=":DetailActivity">??????????</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啟動一個應用
?
am?start?-n?com.xx.xx/com.xx.xx.activity.WelcomeActivity??
畫一個View對象
CategoryTitleView?goodTitleView?=?new?CategoryTitleView(mContext,?null);??Bitmap?bitmap?=?Bitmap.createBitmap(getWidth(),?getHeight(),?Bitmap.Config.ARGB_8888);??Canvas?canvas2?=?new?Canvas(bitmap);??goodTitleView.setView(mItemData);??goodTitleView.measure(MeasureSpec.makeMeasureSpec(getWidth(),?MeasureSpec.EXACTLY),?MeasureSpec.makeMeasureSpec(getHeight(),?MeasureSpec.EXACTLY));??goodTitleView.layout(0,?0,?getWidth(),?getHeight());??goodTitleView.draw(canvas2);??canvas.drawBitmap(bitmap,?0,?0,?null);??
drawBitmap 使用
?
????public?static?void?drawImage(Canvas?canvas,?Bitmap?blt,?int?x,?int?y,?int?w,?int?h,?int?bx,?int?by)??????{????????????????????????????????????????????????????????????????Rect?src?=?new?Rect();????????Rect?dst?=?new?Rect();????????????????src.left?=?bx;???????????src.top?=?by;??????????src.right?=?bx?+?w;????????src.bottom?=?by?+?h;????????????????dst.left?=?x;????????????dst.top?=?y;????????????dst.right?=?x?+?w;????????????dst.bottom?=?y?+?h;????????????canvas.drawBitmap(blt,?src,?dst,?null);??????????????????src?=?null;??????????dst?=?null;??????}??
?
?
?
動態設置左右圖標
?
?
Drawable?img_on,?img_off;??Resources?res?=?getResources();??img_off?=?res.getDrawable(R.drawable.btn_strip_mark_off);??img_off.setBounds(0,?0,?img_off.getMinimumWidth(),?img_off.getMinimumHeight());??btn.setCompoundDrawables(img_off,?null,?null,?null);?
?
總結
以上是生活随笔為你收集整理的常用安卓开发技巧汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。