`

android开发下的一些技术要点【如有需要会更新】

 
阅读更多
1,对于去title方法。在oncreate方法中设置
this.requestWindowFeature(Window.FEATURE_NO_TITLE);

但是必须记住,此方法必须在setContentView方法之前,否则报错。
2,获取显示屏幕大小的方法。
this.getWindow().getWindowManager().getDefaultDisplay().getWidth()

this.getWindow().getWindowManager().getDefaultDisplay().getHeight()

3,对于RadioButton来说,必须在RadioGroup之中,而且对于哪个RadioButton被选中可以使用自定义的(选中方法==buttnID),不过更推荐采用getCheckedRadioButtonId()方法来进行。
4,对于全屏的方法。
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        							WindowManager.LayoutParams.FLAG_FULLSCREEN);

5,对于URL。引用IBM技术文章:http://www.ibm.com/developerworks/cn/opensource/os-android-networking/?1321493252
类似自己也做一个,这上面应该在manifest文件中加入访问权限。如:
<uses-permission android:name="android.permission.INTERNET"/>

其次对于URL来说,www.google.com.hk并非是一个URL,应该为http://www.google.com.hk,必须加入协议。否则直接跳转到MalformedURLException,用户得不到任何信息提示。
6,对于竖屏锁定,android机器有方向感应器,所以屏幕会进行自动横屏/竖屏切换。解决的方法。在manifest中的action节点内加入
android:screenOrientation="portrait"   // 竖屏 , 值为 landscape 时为横屏

来锁定屏幕。
7,对于wifi的管理。
     a,权限:
        
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
	<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
	<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

     b,获得wifi管理:
        
WifiManager wifi = (WifiManager) this.getSystemService(Service.WIFI_SERVICE);

     c,wifi管理:
        
wifi.setWifiEnabled(true);//打开
wifi.setWifiEnabled(false);//关闭

     d,获得状态:
        
wifi.getWifiState()

         状态信息为0,1,2,3,4分别代表不同状态。具体查SDK。

8,已知res/drawable下有pic.jpg。如何不使用R.drawable.pic来设置图片?
int srcID = getResources().getIdentifier("fog", "drawable", "com.duduli.li");
iv.setImageResource(srcID);

9,屏幕长按事件
对于控件的长按事件有专用的方法,setOnLongClickListener一般这个方法够用了。
但是对于屏幕来说却没有,所以我们需要一些手势动作GestureDetector就是一个常用手势动作。一下是代码:
       gd = new GestureDetector(new OnGestureListener() {
			
			@Override
			public boolean onSingleTapUp(MotionEvent e) {
				// TODO Auto-generated method stub
				System.out.println("single tap");
				return false;
			}
			
			@Override
			public void onShowPress(MotionEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
					float distanceY) {
				// TODO Auto-generated method stub
				return false;
			}
			
			@Override
			public void onLongPress(MotionEvent e) {
				// TODO Auto-generated method stub
				System.out.println("long press");
				
			}
			
			@Override
			public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
					float velocityY) {
				// TODO Auto-generated method stub
				return false;
			}
			
			@Override
			public boolean onDown(MotionEvent e) {
				// TODO Auto-generated method stub
				return false;
			}
		});

自定义实现上面,然后在重写onTouchEvent的方法。
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		gd.onTouchEvent(event);
		return super.onTouchEvent(event);
	}

10,关于手机应用程序的问题,
小米终于到手里了,迫不及待的安装了自己做的软件。却突然发现一个问题。
因为自己的软件都存放在一个同名包里面“com.duduli.li”结果发现我将自己的card安装好了,再安装自己的ibook,card没有了。真这样的么?
11,关于基站定位:
TelephonyManager tm = (TelephonyManager) LACandCELLIDActivity.this.getSystemService(Context.TELEPHONY_SERVICE);
CellLocation cl = tm.getCellLocation();
		        GsmCellLocation gcl = (GsmCellLocation) cl;
		        
		        int cellID = gcl.getCid();
		        int lac = gcl.getLac();
                        String u = "http://gisapi.sinaapp.com/jizhan.php?cellid="+cellID+"&loc="+lac;
                        try {
					URL url = new URL(u);
					URLConnection conn = url.openConnection();
					BufferedReader br = new BufferedReader(
							new InputStreamReader(conn.getInputStream()));
					String line = "";
					while((line=br.readLine()) != null){
						System.out.println(line);
						
					}
					
					
				} catch (MalformedURLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}


这里需要加入三个权限:
	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
	<uses-permission android:name="android.permission.INTERNET"/>


11,通过已知的两个Google map经纬度,测量两点之间的距离:
GeoPoint aGeoPoint = new GeoPoint((int) (22.550734 * 1000000), (int) (114.102295 * 1000000));
GeoPoint bGeoPoint = new GeoPoint((int) (22.550430 * 1000000), (int) (114.100861 * 1000000));

public double getDistance(double lat1, double lon1, double lat2, double lon2) {
        float[] results = new float[3];
        Location.distanceBetween(lat1 / 1E6, lon1 / 1E6, lat2 / 1E6, lon2 / 1E6, results);
        return results[0];
    }

System.out.println(getDistance(bGeoPoint.getLatitudeE6(), bGeoPoint.getLongitudeE6()
        		,aGeoPoint.getLatitudeE6(), aGeoPoint.getLongitudeE6()));

参数两点顺序无所谓。

12,今天忙活了一天的基站定位程序。出现了2个问题。
第一个,问题是自己很白痴。把url的参数写错了。所以导致程序总是出错。
现在总结下第二给问题吧。
之前自己的程序打包都是使用的debugkey进行的。之前都还没有出现问题,知道开发这个Google map的定位。
要申请那个开发key才能进行。
具体的为
C:\Program Files\Java\jdk1.6.0_24\bin>keytool -genkey -alias duduli.keystore -ke
yalg RSA -validity 20000 -keystore C:\Users\Administrator\.android\duduli.keysto
re

和debugkey的一样,询问姓名什么的。
然后通过这个keystore在进行一次密钥获得
C:\Program Files\Java\jdk1.6.0_24\bin>keytool -list -alias duduli.keystore -keys
tore C:\Users\Administrator\.android\duduli.keystore

http://code.google.com/intl/zh-CN/android/maps-api-signup.html
通过得到这个的密钥,替换之前debug版的密钥,然后打包采用duduli.keystroe进行打包就可以了。
具体可以参看《Google Android开发入门与实战》第4章和第13章。网上有pdf版本下载http://ishare.iask.sina.com.cn/f/7617452.html

13,对于某个应用程序或activity你只想他一个实例在运行。那么可以在menifest.xm中的activity中设置
android:launchmode="singleTask"

如果设置了singleTask的activity已经在运行了,而你用intent启动这个activity那么,系统将不会调用onCreate方法,而是调用onNewIntent。

14,总会出现这样的问题。
比如一个外部类执行的时候,你需要修改主线程UI的状态,那么你可以采用handler+message的方法。或者通过建立内部类的方法进行解决。

15,此问题未能解答。http://duduli.iteye.com/admin/blogs/1447684

16,对于输入框,默认让其输入数字的方法:
et.setKeyListener(new DigitsKeyListener(false, true));


17,获得当天的0时0分0秒的Calender
Calendar c = Calendar.getInstance();
		c.set(c.get(Calendar.YEAR),
				c.get(Calendar.MONTH),c.get(Calendar.DAY_OF_MONTH),0,0,0);


18,最近在做一个类似地图的东西,一个imageview的外层嵌套了一个ScrollView和一个HorizontalScrollView,如果图片比较大的话,那么怎么获取图片的宽度和高度呢? 最旧爱男单的方法是
horizontalScrollView.getChildAt(0).getWidth()  ---宽度
scrollView.getChildAt(0).getHeight()   ---高度



19,图片加水印的方法。
从资源文件中的图片获取一个bitMap
Bitmap b1 = BitmapFactory.decodeResource(getResources(), R.drawable.campus_map);

public Bitmap doodle(Bitmap src, Bitmap watermark)  
	    {  
	        // 另外创建一张图片  
	        Bitmap newb = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图  
	        Canvas canvas = new Canvas(newb);  
	        canvas.drawBitmap(src, 0, 0, null);// 在 0,0坐标开始画入原图片src  
	        canvas.drawBitmap(watermark, (src.getWidth() - watermark.getWidth()) / 2, (src.getHeight() - watermark.getHeight()) / 2, null); // 涂鸦图片画到原图片中间位置  
	        canvas.save(Canvas.ALL_SAVE_FLAG);  
	        canvas.restore();  
	          
	        watermark.recycle();  
	        watermark = null;  
	        System.out.println("create image");
	        return newb;  
	    }  


20,对于本地测试虚拟机。本地相对于android虚拟机IP为:10.0.2.2

21,利用httpClient来测试网络,或者链路是否通畅
			HttpGet httpGet = new HttpGet(URL);
			HttpClient httpClient = new DefaultHttpClient();
			HttpResponse httpResponse;
			try {
				httpResponse = httpClient.execute(httpGet);
				if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
					
				}
			} catch (ClientProtocolException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}


22,关于android退出的问题。
似乎以前没有出现过这样的问题。
A界面跳转到B界面,B点击back按钮,实现finish的方法,不能将程序退出,而是重新进入了A界面,这里查看了很多方法都不成。
最后想了还是在A的restart方法里面重写A.this.finish。这样才能退出。

23,使用phonegap开发问题。
在使用phonegap开发的时候页面跳转会出现需要注册om.phonegap.DroidGap的消息。
这时候我们需要在androidmenifest中加入
 <activity android:name="com.phonegap.DroidGap" ></activity>
分享到:
评论
2 楼 duduli 2011-11-15  
jstl1point0 写道
不是全屏列,不对哦

恩,弄错了,是去掉title的。
1 楼 jstl1point0 2011-11-14  
不是全屏列,不对哦

相关推荐

    android系统原理与开发要点详解

    总之,《Android系统原理与开发要点详解》是一套全面介绍Android开发技术的资料,对于希望提升Android开发技能的开发者来说,这是一份宝贵的参考资料。通过学习,开发者不仅能掌握Android应用开发的基本技能,还能...

    Android系统原理及开发要点详解pdf

    《Android系统原理及开发要点详解》是一本深入探讨Android操作系统核心机制和开发实践的重要参考资料。本书旨在帮助读者全面理解Android的内部运作,并掌握在这一平台上进行高效应用开发的关键技巧。 一、Android...

    android系统原理及开发要点详解

     1.3.2 基于源代码SDK Android开发 11  第2章 Android系统开发综述 13  2.1 Android的系统架构 13  2.1.1 软件结构 13  2.1.2 Android的工具 16  2.2 Android源代码的开发环境 18  2.2.1 Android源代码的获取...

    Android开发艺术探索 pdf 下载 高清完整版版).pdf

    《Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。《Android开发艺术探索》从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些...

    Android系统原理及开发要点详解–1.pdf 高清下载

    2. Android开发要点: - 开发环境搭建:了解如何安装和配置Android Studio,它是官方推荐的Android应用开发集成开发环境(IDE)。 - 基本组件:掌握Activity、Service、BroadcastReceiver和ContentProvider这四个...

    Android开发艺术探索(任玉刚)PDF

    《Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。《Android开发艺术探索》从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些...

    Android系统原理与开发要点详解

    ### Android系统原理与开发要点详解 #### 一、Android系统概述及基础知识 **1.1 Android系统背景** Android系统是由Google...无论是对于初学者还是资深开发者来说,掌握Android开发的核心技术和方法都是十分重要的。

    Android系统原理及开发要点详解 - [韩超.梁泉].pdf

    ### Android开发要点 #### 1. 开发工具 - **Android Studio**:官方推荐的集成开发环境(IDE),集成了强大的代码编辑器、调试器和模拟器等功能。 - **SDK**:软件开发工具包,包含了构建和测试Android应用所需的...

    Android 应用开发与底层技术

    1. **Android开发环境搭建**:介绍如何配置适合开发Android应用的开发环境,包括安装Eclipse集成开发环境(IDE)、设置Android模拟器(AVD)、安装Android Development Kit (ADT)、Android Debug Bridge (ADB)等工具...

    Android开发艺术探索

    《Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。《Android开发艺术探索》从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些...

    Android系统原理与开发要点详解(全)

    Android系统原理与开发要点详解(全)Android系统原理与开发要点详解(全)

    【Android系统原理与开发要点详解】05_Android的JAVA虚拟机和JAVA环境

    ### Android的JAVA虚拟机和JAVA环境 #### 第一部分:Dalvik虚拟机 **概述** - **定义**:Dalvik虚拟机是专为Android设计的一...对于开发者而言,理解这些基础知识有助于更好地掌握Android应用的开发流程和技术细节。

    Android 3D游戏开发技术宝典-OpenGL ES 2.0 (吴亚峰) 源代码

    1.3 如何搭建android开发环境 4 1.3.1 sdk的安装及环境配置 5 1.3.2 eclipse集成开发环境的搭建 7 1.3.3 创建并启动模拟器 9 1.4 hello android应用程序的开发 11 1.4.1 第一个android应用程序 12 ...

    【Android系统原理与开发要点详解】

    Android SDK是Android开发的基础工具包,包含了必要的开发工具、文档和示例代码。开发者可以通过SDK创建、调试和测试Android应用程序。SDK提供了不同版本的选择,以适应不同版本的Android系统开发。 **3.2 Android...

    Android开发艺术探索PDF+源码+笔记

    《Android开发艺术探索》是一本深受Android开发者喜爱的书籍,由尹吉欢撰写,全面而深入地探讨了Android应用开发的各个重要方面。这本书旨在帮助读者提升Android开发技能,掌握更多的实践技巧,以及理解Android系统...

    Android系统原理及开发要点详解PDF扫描.韩超,梁泉

    6. **Android最新特性**:随着Android版本的更新,新特性如Jetpack库、Kotlin语言的使用、Android Studio的开发工具等也会有所涉及。 7. **Google Play服务**:Google Play服务提供的API,如Google Maps、GCM/FCM推...

Global site tag (gtag.js) - Google Analytics