很多网友表示看Android时,很多概念不是很清楚,可能是因为Java基础不是很了解,很多开发者可能推荐Java编程思想,不过短期内这种类型的图书更像是语法糖这类的玩具,这里Android123推荐三本图书,可以免去大家找来找去,Android开发网的宗旨就是简单高效,经济,毕竟市面上的图书鱼龙混杂,其实买两本厚书,从浅入深学习Java这种语言还是很快的。 1. 疯狂Java讲义 原价 ¥99.00 元 2. Java高手真经. 编程基础卷:Java核心编程技术 定价 :¥96.00 3. 分布式Java应用:基础与实践 原价¥49.80 元 这三本书看起来可能前两本比较厚,但是内容难易中等,入门和提高很轻松,如果你继续提高,再看Java编程思想可能发现,开发Android应用基本上这4本书来学习Java基础足够了。投入不超过300元,比起各种Java培训等等更有效经济。
April 2013
查看Android应用的详细信息2.3有新方法 Android开发技术
在老版本的固件中,我们查看一个Android应用的相信信息,需要自己构造Settings的component name这些package name和uri,在Android 2.3中调用,被精简成了一个Intent的Action,定义如下Intent.ACTION_APPLICATION_DETAILS_SETTINGS 当然直接硬编码为 "android.settings.APPLICATION_DETAILS_SETTINGS" 这个字符串,在API Level为9的SDK以及最终运行在2.3或更高版本的固件中,比如Nexus S、Atrix 4G、Xperia arc等新机型上。
Android OpenGL下截图代码 Android开发技术
Android平台如何在OpenGL下截图呢? 如果是一个FPS类的游戏可能常规的方式截图,由于Android系统底层读取framebuffer的效率不是很高,尝尝截图出来的游戏可能由于刷新问题,产生上半部分和下半部分不匹配的问题,在GL中我们可以使用下面这个代码来解决。 public static Bitmap SavePixels(int x, int y, int w, int h, GL10 gl) { int b[]=new int[w*h]; int bt[]=new int[w*h]; IntBuffer ib=IntBuffer.wrap(b); ib.position(0); gl.glReadPixels(x, y, w, h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib); for(int i=0; i<h; i++) { for(int j=0; j<w; j++) { int pix=b[i*w+j]; int pb=(pix>>16)&0xff; int pr=(pix<<16)&0x00ff0000; int pix1=(pix&0xff00ff00) | pr […]
自定义Android菜单背景 Android开发技术
如何自定义Android菜单背景呢? 默认的情况下Android系统的菜单是白色的,下面的例子可以通过自定义的xml布局实现个性化的menu public class MenuEx extends Activity { private static final String TAG = "android123"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = new MenuInflater(getApplicationContext()); inflater.inflate(R.menu.options_menu, menu); setMenuBackground(); return true; } 关键代码就是重写Layout类的工厂方法onCreateView,这里对比绘制的View来替换系统中的 protected void setMenuBackground(){ Log.d(TAG, "开始设置菜单的的背景"); getLayoutInflater().setFactory( new Factory() { @Override public View onCreateView ( String […]
ListView自动滚动方法 Android开发技术
如何让你的ListView实现自动滚动呢? Android其实已经考虑到ListView控件的智能滚动操作。直接在Layout中写即可,注意下面的stackFromBottom以及transcriptMode这两个属性。Android123提示大家类似Market客户端的低端不断滚动,Android123将在以后的文章中告诉大家更好的解决方法。涉及代码如下: <ListView android:id="listCWJ" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stackFromBottom="true" android:transcriptMode="alwaysScroll" />
Android获取本机电话号码 Android开发技术
如何在Android上获取本机电话号码,目前Android上提供了一个API可以读取早期SIM卡上固化的号码, private String getPhoneNumber(){ TelephonyManager mTelephonyMgr; mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); return mTelephonyMgr.getLine1Number(); } 上面的getPhoneNumber方法返回当前手机的电话号码,同时必须在androidmanifest.xml中加入 android.permission.READ_PHONE_STATE 这个权限,但是Android123提示大家上面的方法只能获取很老SIM卡的手机号码,目前主流的获取用户手机号码一般采用用户主动发送短信到SP或接收手机来获取。
Android JSON解析类 – JsonReader Android开发技术
在Android 3.0 honeycomb开始提供了新的JSON解析类 – android.util.JsonReader,下面Android123以下面的JSON为例子 [ { "id": 912345678901, "text": "How do I read JSON on Android?", "geo": null, "user": { "name": "android_newb", "followers_count": 41 }, { "id": 912345678902, "text": "@android_newb just use android.util.JsonReader!", "geo": [50.454722, -104.606667], "user": { […]
Android JSON写入类 – JsonWriter Android开发技术
在Android 3.0中新增了一个JSON写入类android.util.JsonWriter,使用JsonWriter可以轻松的生成JSON格式的数据,比如下面的JSON数据为 [ { "id": 912345678901, "text": "How do I write JSON on Android?", "geo": null, "user": { "name": "android_newb", "followers_count": 41 }, { "id": 912345678902, "text": "@android_newb just use android.util.JsonWriter!", "geo": [50.454722, -104.606667], "user": { "name": "jesse", […]
Android 3.0新增日历控件CalendarView Android开发技术
在Android 3.0中新增的日历视图控件可以显示网格状的日历内容,android.widget.CalendarView是从android.widget.FrameLayout中继承。 CalendarView 类提供了基本的日历设置方法, long getDate() 获取从1970年,1月1日,0点0分0秒到现在的毫秒数,因为返回是long型最终只能截止到2038年 int getFirstDayOfWeek() //获取当天是本周的第几天,Android123提示返回的定义在java.util.Calendar类中,比如Calendar.Monday为星期一,定义值为2。 long getMaxDate() //获取CalendarView支持1970年到那天的最大天数 long getMinDate() //获取CalendarView支持1970年到那天的最小天数 boolean getShowWeekNumber() //获取是否显示星期号 boolean isEnabled() //是否显示本日历视图 public void setDate (long date, boolean animate, boolean center) //设置选择日期到1970年的描述 void setDate(long date) //设置选择的日期描述到1970年 void setEnabled(boolean enabled) //设置是否启用视图 void setFirstDayOfWeek(int firstDayOfWeek) //设置本周起始天数 void setMaxDate(long maxDate) void setMinDate(long minDate) void setOnDateChangeListener(CalendarView.OnDateChangeListener listener) //日历视图修改的接口,这个介绍看下面。 void setShowWeekNumber(boolean showWeekNumber) //设置是否显示周号 有关日历控件CalendarView的设置接口 android.widget.CalendarView.OnDateChangeListener 只实现了一个回调方法void onSelectedDayChange(CalendarView view, int […]

Fragment对比Activity – Android碎片介绍 Android开发技术
Fragment是Android honeycomb 3.0新增的概念,Fragment名为碎片不过却和Activity十分相似,下面Android123介绍下Android Fragment的作用和用法。Fragment用来描述一些行为或一部分用户界面在一个Activity中,你可以合并多个fragment在一个单独的activity中建立多个UI面板,同时重用fragment在多个activity中.你可以认为fragment作为一个activity中的一节模块 ,fragment有自己的生命周期,接收自己的输入事件,你可以添加或移除从运行中的activity. 一个fragment必须总是嵌入在一个activity中,同时fragment的生命周期受activity而影响,举个例子吧,当activity暂停,那么所有在这个activity的fragments将被destroy释放。然而当一个activity在运行比如resume时,你可以单独的操控每个fragment,比如添加或删除。 Fragment作为Android 3.0的新特性,有些功能还是比较强大的,比如 合并两个Activity,如图 我们可以看到两个Activity通过两个Fragment合并到一个Activity的布局方式,对于平板等大屏幕设备来说有着不错的展示面板。不过因为Fragment和Activity的生命周期都比较复杂,我们分别对比下: 创建一个fragment你必须创建一个Fragment的子类或存在的子类,比如类似下面的代码 public static class Android123Fragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.android123_fragment, container, false); } } Fragment类的一些代码看起来有些像Activity为了让大家了解清楚,Android开发网给大家整理下Fragment的生命周期如上图所示,部分类似Activity的,我们详细解释 onCreate() 当fragment创建时被调用,你应该初始化一些实用的组件,比如在fragment暂停或停止时需要恢复的 onCreateView() 当系统调用fragment在首次绘制用户界面时,如果画一个UI在你的fragment你必须返回一个View当然了你可以返回null代表这个fragment没有UI. 那么如何添加一个Fragment到Activity中呢? Activity的布局可以这样写 <?xml version="1.0" […]
Android Fragment使用详解 Android开发技术
有关Android Fragment相关内容,昨天我们在Fragment对比Activity – Android碎片介绍一文简单讲了下Fragment的作用以及它的生命周期,今天Android123主要讲些Fragment的管理控制、性能优化以及和Activity的传输相关内容。 一、 管理Fragment 管理Fragment在你的Activity你需要使用一个名为FragmentManager的类,通过调用getFragmentManager()方法来实例化该管理类在你的Activity种。 FragmentManager 类一些主要的方法有通过findFragmentById()来获取一个Activity中有关Fragment布局。当然还有类似findFragmentByTag()方法,以及唐Fragment中出栈的popBackStack()同时可以注册addOnBackStackChangedListener()管理.具体的可以在android.app.FragmentManager类中了解 二、 优化Fragment事物处理 一个很好的特性在添加,删除,替换fragment在Activity时可以使用FragmentTransaction类来提高批量处理的效率,这点和SQLite的数据库更新原理类似。 FragmentManager fragmentManager = getFragmentManager(); //实例化fragmentmanager类 FragmentTransaction transaction = fragmentManager.beginTransaction(); //通过begintransaction方法获取一个事物处理实例。 在这期间可以使用 add(), remove(), 以及 replace(). 最终需要改变时执行 commit()即可,接下来我们写代码 transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); transaction.commit(); 三、Fragment和Activity互相通讯 通常Fragment中我们放入平时标准的控件或自定义的控件,基本上和Activity一样,但是如何Fragment中的View布局也是放到Activity中的,这里Android开发网提示大家有两种方法来实现 View listView = getActivity().findViewById(R.id.cwj); //通过getActivity方法可以获取一个Activity中的fragment,这里的cwj是一个fragment,在activity中的布局如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" […]
DialogFragment类介绍 Android开发技术
DialogFragment是Android 3.0新增的Fragment子类,他的Package在android.app.DialogFragment 中,Dialog和Android常规的Dialog是不同的实现方法。 一、常规对话框 public static class MyDialogFragment extends DialogFragment { int mNum; static MyDialogFragment newInstance(int num) { MyDialogFragment f = new MyDialogFragment(); Bundle args = new Bundle(); args.putInt("num", num); f.setArguments(args); return f; } 下面是Fragment的onCreate方法,需要注意的是,设置布局不在这里,和Activity有些不同。 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mNum = getArguments().getInt("num"); int style = […]
Action Bar使用方法 – Android活动栏(一) Android开发技术
在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个重要的内容,Action Bar主要是用于代替传统的标题栏,对于Android平板设备来说屏幕更大它的标题使用Action Bar来设计可以展示更多丰富的内容,方便操控。 Action Bar主要功能包含: 1. 显示选项菜单 2. 提供标签页的切换方式的导航功能,可以切换多个fragment. 3. 提供下拉的导航条目. 4. 提供交互式活动视图代替选项条目 5. 使用程序的图标作为返回Home主屏或向上的导航操作。 首先我们一起来看下Action Bar代替传统Title的效果,下面一个平板应用的标题栏,是不是图标很大啊。 Android开发网提示在你的程序中应用ActionBar需要注意几点,SDK和最终运行的固件必须是Android 3.0即honeycomb,在androidmanifest.xml文件中的uses-sdk元素中加入android:minSdkVersion或android:targetSdkVersion,类似 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android123.cwj" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="honeycomb" /> <application … > … </application> </manifest> 如果需要隐藏Action Bar可以在你的Activity的属性中设置主题风格为NoTitleBar在你的manifest文件中,Android123提示大家,下面的代码在3.0以前是隐藏标题,而在3.0以后就是隐藏ActionBar了,代码为 <activity android:theme="@android:style/Theme.NoTitleBar"> 一、添加活动条目 […]
ActionBar使用方法 – Android活动栏(二) Android开发技术
有关Android活动栏-ActionBar的功能除了添加活动条目 Action Items和添加活动视图 Action View外今天Android123和大家一起来看下支持多Fragment切换的ActionBar标签页和下拉导航。 三、添加标签 Tabs 在ActionBar中实现标签页可以实现android.app.ActionBar.TabListener ,重写onTabSelected、onTabUnselected和onTabReselected方法来关联Fragment。代码如下 private class MyTabListener implements ActionBar.TabListener { private TabContentFragment mFragment; // Called to create an instance of the listener when adding a new tab public TabListener(TabContentFragment fragment) { mFragment = fragment; } @Override public void onTabSelected(Tab […]
Action Bar示例代码 (一) Android开发技术
今天一起来看下Android Action Bar的示例代码,我们通过活动栏做一个简单选项菜单。下面这个例子将演示ActionBar.NAVIGATION_MODE_STANDARD、ActionBar.NAVIGATION_MODE_TABS和 : ActionBar.NAVIGATION_MODE_STANDARD等模式的效果。最后Android123仍然提示大家Action Bar是Android 3.0 honeycomb才开始有的特性,老版本的SDK和固件无法使用。 public class ActionBarDisplayOptions extends Activity implements View.OnClickListener, ActionBar.TabListener { private View mCustomView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.action_bar_display_options); findViewById(R.id.toggle_home_as_up).setOnClickListener(this); findViewById(R.id.toggle_show_home).setOnClickListener(this); findViewById(R.id.toggle_use_logo).setOnClickListener(this); findViewById(R.id.toggle_show_title).setOnClickListener(this); findViewById(R.id.toggle_show_custom).setOnClickListener(this); findViewById(R.id.toggle_navigation).setOnClickListener(this); findViewById(R.id.cycle_custom_gravity).setOnClickListener(this); mCustomView = getLayoutInflater().inflate(R.layout.action_bar_display_options_custom, null); final ActionBar bar = getActionBar(); bar.setCustomView(mCustomView, new ActionBar.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); bar.addTab(bar.newTab().setText("Tab 1").setTabListener(this)); […]
ActionBar示例代码 (二) Android开发技术
ActionBar相关的示例代码第二部分分为两种,作为Android 3.0的重要特性我们直接看代码: 一、使用菜单资源构造 public class ActionBarMechanics extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_ACTION_BAR); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add("Normal item"); MenuItem actionItem = menu.add("Action Button"); actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); actionItem.setIcon(android.R.drawable.ic_menu_share); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { Toast.makeText(this, "Selected Item: " […]
DialogFragment示例代码 Android开发技术
Fragment作为Android 3.0的重要新特性Android123已经使用了三篇文章进行介绍,如果你还不知道Fragment可以先通过Fragment对比Activity – Android碎片介绍一文了解,今天有关Fragment的子类DialogFragment完整的示例工程代码我们一起来看看: 警告窗口 FragmentAlertDialog public class FragmentAlertDialog extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_dialog); View tv = findViewById(R.id.text); ((TextView)tv).setText("Android123-DialogFragment Samples"); Button button = (Button)findViewById(R.id.show); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { showDialog(); } }); } void showDialog() { DialogFragment newFragment = […]
Fragment示例代码 Android开发技术
Android 3.0平板系统的重要特性Fragment示例代码今天Android123给大家两个例子,一起来看下Fragment的实战代码: 一、通过Fragment实现简单的上下文菜单 public class FragmentContextMenu extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ContextMenuFragment content = new ContextMenuFragment(); getFragmentManager().beginTransaction().add(android.R.id.content, content).commit(); //在Activity中通过这个与Fragment通讯 } 下面ContextMenuFragment是我们从Fragment派生的子类,里面重写了onCreateView来布局自己的Fragment public static class ContextMenuFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = […]
ProcessDialog结合Thread处理耗时操作 Android开发技术
很多初入Android开发的网友表示经常遇到ANR这类的UI假死或提示强制关闭的问题,有的网友可能想到通过创建一个Android Service的方式来解决耗时操作的假死,但是Android123还是给大家一个简单实用的方法通过创建一个线程而不是服务的方式来解决耗时操作时的假死或等待。 在一个名为Android123的Activity中,我们通过一个进度条控件ProgressDialog可以处理很多耗时操作。代码如下 final ProgressDialog dialog = ProgressDialog.show(Android123.this, "标题", "正文", true); final Handler handler = new Handler() { public void handleMessage(Message msg) { dialog.dismiss(); //关闭progressdialog } }; Thread cwjThread = new Thread() { public void run() { //这里处理耗时操作,比如文件下载等等。 handler.sendEmptyMessage(0); //告诉handler } }; cwjThread.start();
API Level对照表,更新至2.3.3 Android开发技术
Google近期更新Android SDK频率加快,很多网友还不知道API Level 10是多少,还有就是Android 3.0 honeycomb的API Level又是多少呢? 下面Android123整理出最新的SDK API版本号对照表: Android 3.0 – honeycomb Android 2.3.3 – API Level 10 Android 2.3 – API Level 9 2.2 – 8 2.1 – 7 2..0.1 – 6 2.0 – 5 1.6 – 4 1.5 -3 1.1 – […]

分析你的Android ANR错误 Android开发技术
Android ANR这个错误大家并不陌生,但是从Android 2.2开始出错的ANR信息会自动上传给Google进行系统分析改进,当然了你的应用ANR错误其实保存在一个文件中,在/data/anr/traces.txt文件中,如果你的Android设备没有Root越狱过,可以将你的软件装在模拟器上分析,模拟器可以直接使用Eclipse中的DDMS里的File Explorer来打开,如下图: 虽然traces.txt是一个文本文件,不过使用windows上的记事本打开可能无法正常处理linux的换行符,这里Android123建议你使用ultra edit查看,当然了使用Windows自带的写字板也是不错的。下面一起来分析下错误吧,第一行为出错的时间,第二行都会写上发生ANR的package Name,下文是com.android.systemui这个包,里面的部分线程出了问题,通过下面的的xxx方法以及对应的java文件,后面的数字为xxx.java文件的第几行,是不是很方便呢? —– pid 125 at 2011-02-22 05:18:01 —–Cmd line: com.android.systemui DALVIK THREADS:(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)"main" prio=5 tid=1 NATIVE | group="main" sCount=1 dsCount=0 obj=0x4001f1a8 self=0xce48 | sysTid=125 nice=0 sched=0/0 cgrp=default handle=-1345006528 | schedstat=( 981213067 8042604425 151 ) at android.os.BinderProxy.transact(Native Method) at android.os.storage.IMountService$Stub$Proxy.isUsbMassStorageConnected(IMountService.java:95) at android.os.storage.StorageManager.isUsbMassStorageConnected(StorageManager.java:385) at […]
Android 2.2开始resources.arsc有改变 Android开发技术
从Android 2.2 API Level8开始APK文件的资源resources.arsc的编码有了小幅的改变,过去使用的是UTF-16LE编码方式被转换成了UTF-8编码,这样的好处就是处理纯英文等直接通过ascii存储语言的国家资源文件将会更小,而对于中文、日文这些国家的资源文件反而会变大。 UTF-16LE对于编码中文、英文均使用2个字节,但是Google可能考虑各个国家主要还是基于类似英文这样的语言存储,使用UTF-8可以减少文件体积,UTF-8是可变长度的,存储英文占1个字节,存储中文占3个字节。总而言之resources.arsc对于汉化Android应用程序十分关键,结构使用了索引表的方式存储,不过Google经常的更改Android API或部分文件的结构并不是一种好的方法,比如在Android 2.3上OpenCore又被换掉了。
Android高手应该精通哪些内容? Android开发技术
很多Android开发者已经度过了初级、中级,如何成为一个Android高手呢? Android123就各个级别的程序员应该掌握哪些内容作为下面分类。 一、初级 1. 拥有娴熟的Java基础,理解设计模式,比如OOP语言的工厂模式要懂得。 2. 掌握Android UI控件、Android Java层API相关使用。 迈向中级,最好再次更新下Java技术,掌握Java concurrent库、nio库,精通xml、json解析,做过socket c/s端的程序。 二、中级 1. 熟练掌握NDK JNI方式的开发,对Android framework十分了解。 2. 移植一些开源项目,比如FFmpeg、Mplayer到Android上运行。 迈向高级,熟悉android开源代码的结构,中间件下层的库,比如webkit、opencore、opengl。 三、高级 1. 熟练的Linux驱动开发,精通Linux内核结构。 2. 掌握Android移植,比如常见的TI OMAP、Qualcomm MSM的硬件移植。 迈向顶级,发现Android系统中的0day漏洞,可以轻松的找出Root系统的10种方法,帮助Google改进Android操作系统。
通过Linux Shell实现Android横竖屏切换 Android开发技术
平时在开发过程中如何切换Android横屏或竖屏显示方式呢? Android123今天分别给出两种方法分别为快捷键兼容模拟器和Linux Shell在真机成功处理。 方法一、 在模拟器调试中通过Ctrl+F11可以切换到横屏即landscape方式显示,而通过Ctrl+F12则emulator将会变为标准的竖屏显示,对于调试Android 3.0平板来说控制模拟器的横竖屏还是很重要的。 方法二、 这种方法通过Linux Shell的方式,我们将一个Android设备通过USB连接到PC上,执行adb shell命令执行真机上的Linux Shell比如 1. 切换为横屏执行 adb shell service call window 2013 i32 0 2. 切换为竖屏执行 adb shell service call window 2013 i32 1 这种方法可以看到其实对windows这个service执行相应的指令和参数,不过Android开发网没有经过测试,可能在模拟器或Root过的真机上有效。
Fragment API将兼容Android 1.6到3.0 Android开发技术
很多网友都知道Android开发网曾经介绍的 Fragment对比Activity – Android碎片介绍 将用于3.0平板的多窗口管理,而Google将决定Fragment API兼容Android 1.6到3.0之间的版本,Fragment API可以很好的解决Android分辨率众多的问题,Fragment由于是Android Honeycomb的新特性,如果向下兼容必须发布相应的静态库,使其支持。 目前Google的技术解决方法可能就是降低Fragment的效果来使其增加更多平台的版本支持,可能在下一次的SDK升级中Google将会以静态库的方式让你的应用兼容Android手机和平板设计,目前最让Google头疼的兼容性问题除了OS版本众多外,还有很多分辨率问题,早点统一Android平台可能是Google目前需要头等考虑的问题之一。
帮助ADT改进DDMS中的Logcat中文乱码问题 Android开发技术
有的时候我们调试Android应用可能涉及中文内容,但是在DDMS的Logcat下显示中文时为乱码,这里大家可以通过自己编译SDK来解决,有关编译Android SDK方法可以参考如何编译Windows平台的Android SDK 下面一起看下哪个代码存在问题吧。 在Android源码DDMS中我们找到 MultiLineReceiver 这个类,对应GIT开源在development/tools/ddms/libs/ddmuilib/src/com/android/ddmuilib/,最主要的就是有关String实例化时最后一个参数,看到ISO-8859-1了吧,我们将这个换成gb2312就可以很好的显示简体中文了,繁体嘛可以考虑big5这种编码等等了,当然了Android123推荐大家使用UTF-8这种兼容性最好的。 public abstract class MultiLineReceiver implements IShellOutputReceiver { public final void addOutput(byte[] data, int offset, int length) { if (isCancelled() == false) { String s = null; try { s = new String(data, offset, length, "ISO-8859-1"); //问题在这里,ISO-8859-1就是Latin-1我们俗称西欧语言 } catch (UnsupportedEncodingException e) { // normal encoding didn’t work, […]
LoaderManager – Android 3.0新特性 Android开发技术
在Android 3.0中提供了一个新概念Loaders,通过LoaderManager类可以很轻松的异步加载数据从Fragment或Activity中,Loaders提供了回调机制通知最终的运行结果,有点类似AsyncTask类,但由于Loader对于并发可以用过Loader管理器统一管理,所以更适合批量处理多个异步任务的处理(当然内部仍然是多线程)。下面就让Android123一起和大家看下honeycomb中的新特性吧,对于解决多重异步I/O加快Android平板应用的运行是十分有效的。 一、LoaderManager LoaderManager类位于android.app.LoaderManager,提供了以下几个方法 abstract void destroyLoader(int id) //停止并移除loader通过IDabstract void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) //打印LoaderManager的状态到一个流中static void enableDebugLogging(boolean enabled) //启用debug记录abstract <D> Loader<D> getLoader(int id) //返回找到的ID或没有匹配的在Loader中abstract <D> Loader<D> initLoader(int id, Bundle args, LoaderCallbacks<D> callback) //初始化Loader使其成为活动状态abstract <D> Loader<D> restartLoader(int id, Bundle args, LoaderCallbacks<D> callback) //启动一个新的或重启一个存在的Loader在管理器中 同时LoaderManager还有一个回调接口android.app.LoaderManager.LoaderCallbacks<D> 用于和LoaderManager交互 abstract Loader<D> onCreateLoader(int id, […]
Loader和Fragment使用示例代码 Android开发技术
Loader和Fragment都是Android 3.0的新特性,有关Fragment相关的内容Android开发网已经用了多个篇幅介绍,而Loader相关的大家可以通过 LoaderManager – Android 3.0新特性 一文了解Loader的作用和结构,下面就以一个简单的工程示例代码了解下Loader。 public class FragmentListCursorLoader extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FragmentManager fm = getFragmentManager(); //获取FragmentManager这个服务实例 if (fm.findFragmentById(android.R.id.content) == null) { //这个资源是android内部的布局,注意是android.R CursorLoaderListFragment list = new CursorLoaderListFragment(); fm.beginTransaction().add(android.R.id.content, list).commit(); } } public static class CursorLoaderListFragment extends ListFragment implements OnQueryTextListener, LoaderManager.LoaderCallbacks<Cursor> { […]

Android移植到HTC6900(Dopod S1) Android开发技术
HTC6900是一款使用CDMA网络的手机,在国内名为HTC Touch或Dopod S1,但这款使用CDMA2000的版本使用了Windows Mobile TouchFLO 3D操作系统,与GSM版本的TI OMAP 850 201MHz相比它采用了Qualcomm MSM7500 400MHz处理器,在性能上有了大幅提高,这和Android G1使用的Qualcomm MSM7201A 528MHz相比虽然有些差距,但仍然很强大,Android移植到了S1上变得很轻松,再不用考虑硬件驱动等问题时几乎可以完美显示使用。 详细的演示视频 参见 HTC Touch Vogue上运行Android操作系统
Android第三方软件也开源 Android开发技术
谷歌在Android平台上开源了,第三方软件也应该开源走普及道路。目前Android开发网将在时机成熟时开放各种应用的工程源代码,让大家买手机,零价格使用软件,谁想用自己编译就ok的精神。最终收费的仅在于手机游戏、网游运营方面。 感谢各位开发人员的支持,我们会提供高质量的软件源代码给大家一起发展学习,首先提供GIT和SVN服务器作为更新平台。

Android截图方法之DDMS篇 Android开发技术
提起Android截图,这里虽然Google在Android操作系统中提供了帧缓存的权限许可,但是没有Root权限仍然无法很好的截图,现在安装好Android SDK和Eclipse,在DDMS中可以看到连接Devices标签中找到可用的唯一个图标,如图下图所示: 最终在Device Screen Capture窗口中就是Android屏幕截图效果,直接单击Save按钮即可保存图片为PNG格式。如图
Android受更多厂商支持,开放手机联盟不断壮大 Android开发技术
Android平台受到了更多厂商的支持,过去观望的索尼爱立信看见韩系手机三星、LG的加入让日本企业逐渐感兴趣,日本目前已经有3家运营商加入,NTT DoCoMo、KDDI、Softbank都决定运营,最终索爱生产Android智能手机是理所当然的事情,沃达丰和美国Vierzion Wireless虽然关系紧密,Verzione一直表示对Android没有丝毫兴趣,但是目前英国市场逐渐被T-Mobile UK蚕食,为了保证最终的客户Vodafone也加入OHA联盟,Google开放手机联盟阵营不断壮大起来。 目前Open Handset Alliance成员有CMCC、KDDI 、HTC、LG、NTT DoCoMo、Sprint、Motorola、Samsung、T-Mobile 、Ascender、Telecom Italia、eBay、Esmertec、Google 、Telefonica、LivingImage、LiveWire、Nuance 、Broadcom、PacketVideo、Intel、SkyPop、Marvell、SONiVOX、NVIDIA 、Aplix、Qualcomm、Noser、SiRF、TAT、Synaptics、Wind River、Texas Instruments、AKM Semiconductor Inc、ARM、ASUSTek Computer Inc、Atheros Communications、Borqs、Ericsson、Garmin International Inc、Huawei Technologies、Omron Software Co. Ltd、Softbank Mobile Corporation、Sony Ericsson、Teleca AB、Toshiba Corporation、Vodafone.
Java文件类RandomAccessFile性能低下 Android开发技术
提起I/O读取在Android中几乎全部使用了Sun的文件读取类,其中由一个不同于其他的文件类RandomAccessFile在各方面操作上比较简单,附带了比如Seek等查找方式,但作为一个不自带缓冲区的类性能还是十分低的,这里建议在使用过的过程中配合BufferedReader读取方式达到一个简单的缓冲处理,但默认的缓冲区仍然比较小为8KB,在处理比如Android来电归属地数据库方面显得有些吃力。经过优化改进后的Java文件读取类性能基本达到常规需要。相关内容查看Android SDK中有关 java.io.BufferedReader和java.io.RandomAccessFile的介绍。

