常常用的一些小技巧都會記錄在這邊html
API權限錯誤提示解決方法:
報這麼一個錯誤:java
- Call requires API level 11 (current min is 8): android.animation.ObjectAnimator#ofFloat
主要緣由是 AndroidManifest.xml中的API權限等級不夠:linux
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="17" />
修改爲:
- <uses-sdk
- android:minSdkVersion="11"
- android:targetSdkVersion="17" />
獲取手機號碼:android
-
- 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
在使用彈出框但願點擊彈出框外的任意處讓彈出框消失,web
先把設置彈出框的setOutsideTouchable爲true,而後重寫onTouch。shell
- 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"/>
也能夠帶上IDcanvas
- <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網絡
通常將邏輯上一塊兒運行的組件配置在一個進程中。若是邏輯上有必定分離的,能夠新開一個進程。這樣能夠下降主進程的空間和時間開銷app
- <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);