常用安卓开发技巧汇总
经常用的一些小技巧都会记录在这边
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();
- //记得在manifest file中添加
- <uses-permission
- android:name="android.permission.READ_PHONE_STATE" />
- //程序在模拟器上无法实现,必须连接手机
格式化string.xml 中的字符串
- // in strings.xml..
- <string name="my_text">Thanks for visiting %s. You age is %d!</string>
- // and in the java code:
- 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("text/plain"); //模拟器请使用这行
- 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 statFs=new StatFs(sdcardDir.getPath());
- /** Block 的 size*/
- Long blockSize=statFs.getBlockSize();
- /** 总 Block 数量 */
- Long totalBlocks=statFs.getBlockCount();
- /** 已使用的 Block 数量 */
- 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
- //设置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 = Toast.makeText(context, "短信内容: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG);
- //设置toast显示的位置
- //toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 200);
- //显示该Toast
- toast.show();
- }
- }
XML中需要添加:
- <receiver android:name=".SMSReceiver" android:enabled="true">
- <intent-filter>
- <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
- </intent-filter>
- </receiver>
命令行常用命令
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. // getWindowManager().getDefaultDisplay().getMetrics(dm);
- 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里面加入:
- //当前activity为首页, 如果他前面还有其他的activity,说明用户按过home键
- //则无需跑初始化的界面逻辑
- 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 = (TextView) findViewById(R.id.custom);
- // 将字体文件保存在assets/fonts/目录下,www.linuxidc.com创建Typeface对象
- 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 使用
- // GameView.drawImage(canvas, mBitDestTop, miDTX, mBitQQ.getHeight(), mBitDestTop.getWidth(), mBitDestTop.getHeight()/2, 0, 0);
- public static void drawImage(Canvas canvas, Bitmap blt, int x, int y, int w, int h, int bx, int by)
- { //x,y表示绘画的起点,
- Rect src = new Rect();// 图片
- Rect dst = new Rect();// 屏幕位置及尺寸
- //src 这个是表示绘画图片的大小
- src.left = bx; //0,0
- src.top = by;
- src.right = bx + w;// mBitDestTop.getWidth();,这个是桌面图的宽度,
- src.bottom = by + h;//mBitDestTop.getHeight()/2;// 这个是桌面图的高度的一半
- // 下面的 dst 是表示 绘画这个图片的位置
- dst.left = x; //miDTX,//这个是可以改变的,也就是绘图的起点X位置
- dst.top = y; //mBitQQ.getHeight();//这个是QQ图片的高度。 也就相当于 桌面图片绘画起点的Y坐标
- dst.right = x + w; //miDTX + mBitDestTop.getWidth();// 表示需绘画的图片的右上角
- dst.bottom = y + h; // mBitQQ.getHeight() + mBitDestTop.getHeight();//表示需绘画的图片的右下角
- 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);
- //调用setCompoundDrawables时,必须调用Drawable.setBounds()方法,否则图片不显示
- img_off.setBounds(0, 0, img_off.getMinimumWidth(), img_off.getMinimumHeight());
- btn.setCompoundDrawables(img_off, null, null, null); //设置左图标
常用安卓开发技巧汇总相关推荐
- RISC-V IDE MRS使用笔记(七) :常用开发技巧汇总
RISC-V IDE MRS使用笔记(七) :常用开发技巧汇总 Q1: MRS调试时如何查看外设寄存器内容? A1: 在调试配置界面添加相应的.svd文件. Q2: MRS如何调用数学库? A2: # ...
- 解密android日志xlog,安卓开发技巧2:自定义日志工具类XLog的实现
安卓开发技巧二:自定义日志工具类XLog的实现 我们在开发过程中,打印日志是必不可少的一个调试环节,然而,直接使用系统自带的Log日志类,并不能满足我们实际项目的需求:假如我们现在在开发一款比较大的项 ...
- 微信小程序-常用API开发技巧学习笔记
常用API开发技巧学习笔记 第一章 认识微信小程序 前后端分离的开发方式 小程序的特点 小程序对开发者的影响 学习小程序需要的基础 第二章 小程序环境搭建与开发工具介绍 小程序开发环境 没有小程序号对 ...
- 社区说|常用 Android 开发技巧
活动时间 4月7日(本周四) 20:00-21:00 活动日程 20:00-20:45 主题分享 常用 Android 开发技巧 李老师的开发技巧私房菜,一定有你没吃过的菜! 重构技巧 常用插件 阅读 ...
- 安卓开发工具汇总,开发人员必备利器
安卓开发工具汇总,开发人员必备!安卓开发过程中需要用到各种工具,作为一名安卓开发人员,有木有感到亚历山大,那么多工具!今天给大家汇总了一下安卓开发工具,安卓开发人员必备利器! 1.Draw 9-Pat ...
- 安卓开发工具汇总,开发人员必备!
安卓开发工具汇总,开发人员必备!安卓开发过程中需要用到各种工具,作为一名安卓开发人员,有木有感到亚历山大,那么多工具!今天爱 加 密小编给大家汇总了一下安卓开发工具,安卓开发人员必备利器! 方法/步骤 ...
- Android安卓开发知识库汇总
初级 Android 面试知识库 Android 面试题总结之Android 进阶(二) - fuchenxuan blog - 博客频道 - CSDN.NET 如何成为一名优秀的程序员 | Myst ...
- Pycharm常用的小技巧汇总,Python新手上路必备,快上车!
Pycharm作为Python开发最常用的IDE之一,不仅兼容性好,而且功能也相当丰富,比如调试.语法高亮.智能提示等等功能,它还支持web开发框架比如Django等,当你熟悉了它之后,开发效率是相当 ...
- 移动平台WEB前端开发技巧汇总
原名<移动平台3G手机网站前端开发布局技巧汇总>,由武方博整理的,让我们了解下移动设备上的WEB站点开发的基础知识,多些时间和精力去优化其他细节,我这里对原文的标签格式做了细微的调整,阅读 ...
最新文章
- 思科服务器与交换机链接配置文件,使用思科S系列交换机上的配置迁移工具转换配置文件...
- 基于深度学习的图像分类Image classification with deep learning常用模型
- 三十五、数据仓库的设计和应用
- 被曝大裁员,涉及30%员工!公司内斗、高管之间拉帮结派 喜茶回应了...
- 学习python内一般函数知识
- 计算机术语多态意思,计算机外文翻译测试多态的关系的准则.doc
- 小技巧(8):Word中自定义目录,并设置自动目录的格式
- 华为2019.8.22笔试题
- UHF超高频RFID通信协议实验步骤
- RK3568平台开发系列讲解(安卓篇)Android Telephony框架介绍
- Mac鼠标移动速度慢解决方案
- UE5 官方案例Lyra 全特性详解 7.资源管理
- 烟草物流信息综合管理平台研究与应用——以H市卷烟厂烟草物流配送中心为例
- 雷军释疑卸任小米子公司法人背后:企业家需被更宽容对待
- 搭建电话机器人或OKCC外呼中心系统实体机与云服务器哪个好(三)
- Revit综合插件使用教程,综合插件主要的几个功能(上)
- 自己做量化交易软件(41)自编仿通达信公式及自编因子公式的计算速度比较及因子公式结果排名
- 自适应学习系列(一)IRT简介
- Linux下执行.sh命令出现-bash: ./bin/start.sh: /bin/bash^M: bad interpreter: No such file or directory 问题解决
- hive/mysql使用lateral view explode时会出现的问题(bug)
热门文章
- Jenkins-Gitlab配置方法
- 八年溯源,如何巧搭区块链
- 一个redis的连接库的实现
- oracle 各种日期函数格式和操作
- Why Apache Spark is a Crossover Hit for Data Scientists [FWD]
- NotificationManagerService使用详解与原理分析(一)
- Cacti迁移RRA数据迁移脚本
- 《硝烟中的Scrum和XP》书摘(1)
- dim private public static_PHP中const,static,public,private,protected的区别
- python中loop函数_python + Django 的forloop功能试验讲解