Android中如何做到Service被关闭后又自动启动 首先要说的是,用户可能把这种做法视为流氓软件。大部分时候,程序员也不想把软件做成流氓软件,没办法,领导说了算。 我们在使用某些Android应用的时候,可能会发现安装了某应用以后,会有一些服务也会随之运行。而且,这些服务每次都会随着手机开机而启动。有的服务做的更绝,当用户在运行的服务中手动停止该服务以后,过了一段时间,服务又自动运行了。虽然,从用户的角度来说,这种方式比较流氓。但是,从程序员的角度来说,这是如何做到的呢?经过研究,我发现有一种方式是可以实现的。下面就和大家分享。 先简单介绍,一会儿会贴上全部代码。 如何做到开机启动? 这个比较简单,网上的资料够多,只要实现一个BroadcastReceiver,监听手机启动完成的事件ACTION_BOOT_COMPLETED即可。需要注意的是,好像不能用模拟器,要用手机测试。 那如何做到启动一个Service,并且在用户关闭后能自动又启动了呢? 一般的,都会在上面说到的BroadcastReceiver的实现里面,监听手机启动完成后,启动一个Service,这是一般的做法。问题是,用户可以关闭掉该Service。那么怎样才能使它被关闭掉以后,再次启动呢?聪明的你一定立即就想到了,如果不直接启动Service,而是启动一个timmer,或者alarmManager,然后每隔一段时间去启动Service,就可以了。 还是看下面的全部代码吧,不过多解释了。这些代码中还是有不少概念的,不熟悉AlarmManager、PendingIntent、BroadcastReceiver、Service等等这些概念的同学可以百度一下。 package com.arui.framework.android.daemonservice; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.SystemClock; public class BootBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent mintent) { if (Intent.ACTION_BOOT_COMPLETED.equals(mintent.getAction())) { // 启动完成 Intent intent = new Intent(context, Alarmreceiver.class); intent.setAction(“arui.alarm.action”); PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); long firstime = SystemClock.elapsedRealtime(); AlarmManager am = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); // 10秒一个周期,不停的发送广播 am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime, 10 * 1000, sender); } } } package com.arui.framework.android.daemonservice; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; … Read More
Android中Context详解 —- 你所不知道的Context 前言:本文是我读《Android内核剖析》第7章 后形成的读书笔记 ,在此向欲了解Android框架的书籍推荐此书。 大家好, 今天给大家介绍下我们在应用开发中最熟悉而陌生的朋友—–Context类 ,说它熟悉,是应为我们在开发中 时刻的在与它打交道,例如:Service、BroadcastReceiver、Activity等都会利用到Context的相关方法 ; 说它陌生,完全是 因为我们真正的不懂Context的原理、类结构关系。一个简单的问题是,一个应用程序App中存在多少个Context实例对象呢? 一个、两个? 在此先卖个关子吧。读了本文,相信您会豁然开朗的 。 Context,中文直译为“上下文”,SDK中对其说明如下: Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as… Read More
深入理解ANDROID消息处理系统——LOOPER、HANDLER、THREAD (自) Activity,Service属于主线程,在主线程中才能更新UI,如toast等。其他线程中不能直接使用,这时可以使用Handler来处理,Handler可以在Activity和Service中。 关于在非UI线程中进行UI操作会出现问题: Can’t create handler inside thread that has not called Looper.prepare() 这时有两种方式来解决: (一)在该非UI线程中创建消息队列(因为创建的工作线程默认是没有消息循环和消息队列的),Looper.prepare();…..;Looper.loop(); newThread() { public void run() { Looper.prepare(); //创建消息队列 todo(); Looper.loop();//进入消息循环 }}.start(); (二)运用Handler机制: package com.simon; import android.app.Activity; import android.os.Bundle; import android.os.Message; import android.util.Log; import android.os.Handler; public class MyHandler extends Activity { static final String TAG = “Handler”; Handler h = new… Read More
Supporting Multiple Screens Android runs on a variety of devices that offer different screen sizes and densities. For applications, the Android system provides a consistent development environment across devices and handles most of the work to adjust each application’s user interface to the screen on which it is displayed. At the same time, the system provides APIs that… Read More
Set the absolute position of a view in Android Is it possible to set the absolute position of a view in android? (I know that there is an AbsoluteLayout, but it’s deprecated…) Lets say I have a screen 240x320px, and I want to put an ImageView which is 20x20px with its center at the position (100,100). What do I have to do? Thanks for… Read More
搭建 Android 开发环境 http://www.cnblogs.com/cheney23reg/archive/2010/08/19/1803474.html 这几天看到了几个不错的Android 上的应用,心痒痒,也想探索一下Android 的世界,于是决心学习一下Android 的开发技术。 :) 接下来当然是搭建Android 的开发环境啦,步骤如下: 1. 安装JDK。注意这里只是安装JRE是不行的,需要安装JDK 笔者是去 http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载了 JDK 6 Update 20。 注: 根据www.eclipse.org的官方信息,在windows 平台上安装了JDK 6 Update 21,然后运行Eclipse Helios (3.6) 会出现 crashing,需要进行一些设置 ( http://wiki.eclipse.org/FAQ_How_do_I_run_Eclipse%3F#Oracle.2FSun_VM_1.6.0_21_on_Windows ) Windows 7: 1) 双击 jdk-6u20-windows-i586.exe 进行安装 2) 安装完成后,在命令行中输入 “java -version”,若出现以下信息则表示安装成功: java version “1.6.0_20” Java(TM) SE Runtime Environment (build 1.6.0_20-b02) Java HotSpot(TM) Client VM… Read More
APK文件反编译 查看源代码 相关工具下载 反编译APK文件需要dex2jar和jd-gui这两个工具,我已经打包了,可以本文底部下载。 第一步、下载我提供的工具后解压。 第二步、把目标APK文件扩展名改为zip,用WINRAR或者其他压缩软件打开,解压其中的classes.dex,并放到上面第一步解压出来的工具目录里 如图: 第三步、双击执行目录中的First.bat,会在当前目录生成一个classes.dex.dex2jar.jar文件 第四步、打开jd-gui.exe,File-Open File找到刚才生成的classes.dex.dex2jar.jar文件 OK,现在你可以看到Java源代码了. 如果需要查看APK中的XML文件以及图片,可以用apktool,这里也一并附上,已经放进压缩包里了,上面的截图没有,使用方法: apktool.bat d apk名 解压目录 工具下载: apkdecode (35) or ApkDecode From:http://www.pocketdigi.com/20110905/459.html… Read More
Android Learn Note 1.Android 四大天王:Activity(程序的界面),Intent(数据传输),Service(服务),Content Provider(数据存放) 2.产生APK安装包:Android Manifest里的Export 3.Activity的生命周期:onCreate->onStart->onResume->onPause->Other Activity’s onCreate,onStart,onResume-> onStop()(完全不可见后,才会调用,如第二个ACtivity是Dialog,则不发生),再按Back后,Other Activity’s onPause ->First Activity’s onStart->onResume, Other Activity’s onStop() , onDestroy()(再起来时一定要再有onCreate) 4. A task is a stack of Activities.… Read More
让USB不充电,增加电池寿命 最近一直有网友问我,如何修改注册表或者安装什么软件,能使得USB数据线插上时,不会自动对手机充电。问这个问题的网友们,想必都对自己的手机非常爱护,因为大家都知道电池是有一定的寿命的,过多的充电和放电会降低电池的使用寿命。但是我并不认为这是个好方法。 首先,锂电池的确是有充放次数的限制,但请注意,这里的充放次数是指完成一次完全充电放电的状态,而你USB数据线插上的短短几分钟时间,显然不能算是一次充电的。 其次,现在的锂电池的寿命并不同于以前的镍氢或者镍镉或者早期的锂电池,电池的记忆效应并不是非常严重。个人经验,一般原装电池1年之内,不会因电池记忆效应而导致容量降低,发生使用时间明显减少的情况。 最后,良好的电池使用习惯,我觉得应该从这几个方面注意:有些人电池充着就忘记,一直过了几天才想起来电池还在充电(特别是用座充)这很容易把电池充坏 掉;另外有些人喜欢等电池完全耗尽(比如完全自动关机才充电),这也是不好的习惯,锂电池过度放电也会降低电池寿命的;还有电池如果长时间不用,也需要每 个月充放一次,这样能保护电池以免过度放电。 当然如果你还是觉得USB充电对电池有害的话,那就按照以下方法修改注册表吧: HKEY_LOCAL_MACHINE\Drivers\BuiltIn\usbfndrv\EnableUsbCharging EnableUsbCharging=”0″ 关闭充电,红色电源灯将熄灭 EnableUsbCharging=”1″ 启用充电,红色电源灯会闪烁… Read More