很多Android手机上都配有LED灯,比如HTC的手机在充电、新来短信等时候都会有响应的指示,其实很简单的这都是NotificationManager的一些参数而已,下面Android123给大家说下如何通过代码控制LED灯的闪烁,因为有些机型没有LED灯或颜色种类较少,发布时需要真机观察。 final int ID_LED=19871103; NotificationManager nm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE); Notification notification = new Notification(); notification.ledARGB = 0xFFFFFF; //这里是颜色,我们可以尝试改变,理论上0xFF0000是红色,0x00FF00是绿色 notification.ledOnMS = 100; notification.ledOffMS = 100; notification.flags = Notification.FLAG_SHOW_LIGHTS; nm.notify(ID_LED, notification); nm.cancel(ID_LED);
代码
Android JSON解析示例代码 Android开发技术
来自Google官方的有关Android平台的JSON解析示例,如果远程服务器使用了json而不是xml的数据提供,在Android平台上已经内置的org.json包可以很方便的实现手机客户端的解析处理。下面Android123一起分析下这个例子,帮助Android开发者需要有关 HTTP通讯、正则表达式、JSON解析、appWidget开发的一些知识。 public class WordWidget extends AppWidgetProvider { //appWidget @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { context.startService(new Intent(context, UpdateService.class)); //避免ANR,所以Widget中开了个服务 } public static class UpdateService extends Service { @Override public void onStart(Intent intent, int startId) { // Build the widget update for today RemoteViews updateViews = buildUpdate(this); ComponentName thisWidget […]
Android JNI实例代码(一) Android开发技术
前几天Android123有关Android JNI开发系列教程中有关的源代码,可以在本文中查找: 一、 在JNI中执行Java方法 class AndroidJniDemo { private native void executeMethod(); private void show() { System.out.println("Java cwj print"); //执行了show方法后打印java层的输出 } public static void main(String args[]) { //这里我们在J2SE中测试,Android开发者可以放到Activity中的onCreate调用 AndroidJniDemo ajd = new AndroidJniDemo(); ajd.executeMethod(); } static { System.loadLibrary("AndroidJniDemo"); }} 下面是JNI代码: JNIEXPORT void JNICALLJava_AndroidJniDemo_executeMethod(JNIEnv *env, jobject obj){ jclass clazz = (*env)->GetObjectClass(env, obj); //通过类的对象 jmethodID mid = (*env)->GetMethodID(env, clazz, "show", "()V"); //查找java中的show方法的ID,最后的签名符号为void类型 if (mid == NULL) { return; //如果方法ID没有找到 } printf("JNI cwj print"); //从JNI中打印输出 […]
Android JNI实例代码(二) Android开发技术
我们继续Android JNI开发中的常用代码,第二部分将包含如何在JNI中构造实例化一个Java类以及异常处理的具体方法,有关前一部分的内容可以查看 Android JNI实例代码(一) 。 三、在JNI中构造和实例化Java类 public class AndroidJniDemo4{ public static native void constructClass(); //JNI方法 public static void main(String[] args){ AndroidJniDemo4.constructClass(); }} class CwjThread implements Runnable { int nCount = 0 ; public void run(){ try{ Thread.sleep(1987); //休眠1987毫秒 }catch(Exception e){ e.printStackTrace(); } System.out.println("Count="+ nCount); }} JNIEXPORT void JNICALLJava_AndroidJniDemo4_constructClass(JNIEnv *env, jclass clazz){ jclass jclazz , cwjclazz; jmethodID mid , mid2 , runmid ; jobject obj , obj2 ; jclazz = […]
手势识别兼容Android 1.x和2.x的代码 Android开发技术
由于Android 2.x开始很多API变动比较大新增了一些比如多点触控的支持,对于屏幕触控手势识别中我们需要考虑更多的实现方法,下面是一段兼容Android 1.x和2.x的代码,可以让我们的程序兼容几乎99%的Android手机。 一、首先新建一个抽象类判断SDK版本问题 public abstract class VersionedGestureDetector { private static final String TAG = "VersionedGestureDetector"; OnGestureListener mListener; public static VersionedGestureDetector newInstance(Context context, OnGestureListener listener) { //设计实例化构造方法,这里Android123提示大家目前有3种API的实现方法,我们需要逐一考虑最优的解决方法,以满足高平台更多的功能实现。 final int sdkVersion = Integer.parseInt(Build.VERSION.SDK); //使用android.os.Build判断API Level,但需要将字符串转换为整形 VersionedGestureDetector detector = null; if (sdkVersion < Build.VERSION_CODES.ECLAIR) { //如果版本小于2.0则使用1.5版本的API,可以兼容1.5和1.6 detector = new CupcakeDetector(); } else […]
Android加速感应器开发平衡球代码解析 Android开发技术
如何使用Android的加速感应器开发一个控制铁球滚动的游戏: public class AccelerometerPlayActivity extends Activity { private SimulationView mSimulationView; //游戏主显示View private SensorManager mSensorManager; //感应器管理类 private PowerManager mPowerManager; //电源控制,比如防锁屏 private WindowManager mWindowManager; private Display mDisplay; private WakeLock mWakeLock; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); // 实例化感应器管理类 mPowerManager = (PowerManager) getSystemService(POWER_SERVICE); mWindowManager = (WindowManager) […]
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 […]
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 = […]
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示例程序Snake贪食蛇代码分析(三) Android开发技术
今天我们分析下最复杂的SnakeView的设计,它是派生于TileView方砖类,TileView构建是基于Android直接的显示类View,如果不明白的可以查看Android示例程序Snake贪食蛇代码分析(二)一文有关TileView类的实现, 首先我们看到整个游戏分 READY、PAUSE 、RUNNING 、LOSE四种mMode状态模式,分别对应准备、暂停、运行中、结束(死亡),毕竟贪食蛇没有胜利这个结果。 整个Snake的运行分4个方向,NORTH、SOUTH 、EAST、WEST分别对应了北、南、东、西四个方向,其中变量mDirection对应当前的方向,而mNextDirection对应下个运行时的位置。这里星星分3种,使用的是一个Drawable图片,分RED_STAR、YELLOW_STAR和GREEN_STAR三种颜色,游戏的星星出现位置由Random随机数生成器来决定,这里Random一般和Timer系统时钟来随机生成更真实一些,通过一个Handler对象来控制画面的更新,使用了this.update();和this.invalidate();这两个本地方法,Update和invaildate均为android.view.View类的本地方法。这里资源的使用通过Resources r = this.getContext().getResources();获取了r对象的实例,通过r.getDrawable(R.drawable.redstar)获取资源名为redstar的资源,返回的是一个Drawable对象。 对于按键信息,直接重写View类的onKeyDown方法,这里KeyEvent传递的是按键的映射,比如KEYCODE_DPAD_UP向上,KeyEvent.KEYCODE_DPAD_DOWN向下等等,详细的查看SDK中的onKeyDown @Override public boolean onKeyDown(int keyCode, KeyEvent msg) { if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {} } 整个游戏的控制流程就是上面这些,对于游戏的逻辑而言比较简单,这个贪食蛇并没有包含3D设计和类似Nokia的能量走廊、6边形轨迹,有空了我们一起来完善一个3D的贪食蛇游戏。
AsyncTask实例代码演示Android异步任务 Android开发技术
上次我们讲到了Android提供了一个较线程更简单的处理多任务的方法AsyncTask异步任务类,相对于线程来说AsyncTask对于简单的任务处理更安全,其内部的实现方法使用了Android的Handler机制,对于常见的文件下载可以使用AsyncTask类来处理,在Browser浏览器中就是用了该类下载Web服务器URL的Favicon图标。 首先Android123以简单的下载例子演示该类的大致结构,如下 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { protected Long doInBackground(URL… urls) { int count = urls.length; long totalSize = 0; for (int i = 0; i < count; i++) { totalSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i / (float) count)100)); } return totalSize; } protected void onProgressUpdate(Integer… progress) { setProgressPercent(progress[0]); } […]

