经常用的一些小技巧都会记录在这边
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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?