Android嵌入式开发 开机启动系统应用开发
【转载请注明出处: http://blog.csdn.net/leytton/article/details/78388223】
在进行Android嵌入式开发过程中,往往需要应用开机启动,并且能够一直常驻后台运行。
一、开机启动功能实现
1、开机启动广播
摘自https://my.oschina.net/jgy/blog/135858
使用场景:
手机开机后,自动运行程序。
{只是最近本人在做万达大歌星点餐系统,需要用到系统启动直接启动App避免服务员玩别的app才研究的}
背景知识:
当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为android.intent.action.BOOT_COMPLETED。只要在程序中“捕捉”到这个消息,再启动之即可。记住,Android框架说:Don't call me, I'll call you back。我们要做的是等到接收这个消息,而实现的手段就是实现一个BroadcastReceiver。
代码解析:
1)、界面MainActivity.java
public class MainActivity extends Activity { // 收到消息启动此Activity @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setIntegerProperty("splashscreen", R.drawable.wandapad_splash); TextView tv = new TextView(this); tv.setText("Hello这是MainActivity"); setContentView(tv); } }2)、接收广播消息:BootBroadcastReceiver.java
public class BootBroadcastReceiver extends BroadcastReceiver { static final String ACTION = "android.intent.action.BOOT_COMPLETED"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ACTION)) { Intent mainActivityIntent = new Intent(context, MainActivity.class); // 要启动的Activity mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(mainActivityIntent); } } }该类派生自BroadcastReceiver,覆载方法onReceive中,检测接收到的Intent是否符合BOOT_COMPLETED,如果符合,则启动MainActivity。
3、配置文件:AndroidManifest.xml
在application内添加一下配置:
<receiver android:name=".BootBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>向系统注册了一个receiver,子节点intent-filter表示接收android.intent.action.BOOT_COMPLETED消息。
4)、在manifest中添加以下权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>5)、大功告成!
延伸思考:
在多数情况下,要自动运行的不是有界面的程序,而是在后台运行的service。此时,就要用startService来启动相应的service了。
2、设置入口Activity LaunchMode为singleTask
android中的LaunchMode详解----四种加载模式 http://www.jianshu.com/p/404964d344d3
二、按返回键隐藏到后台不退出
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { moveTaskToBack(false); return true; } return super.onKeyDown(keyCode, event); }
三、系统应用实现
为什么要设置为系统应用?
常驻内存不被系统杀死,即使休眠后也不会挂掉(部分机型可能休眠后关闭网络端口,比如说小米的神隐模式)
步骤:
1、supersu类工具获取root 权限
2、Link2SD 将普通APP转为为系统应用
3、重启
四、设置锁屏时间
减少耗电
<!--修改锁屏设置权限--> <uses-permission android:name="android.permission.WRITE_SETTINGS" />
15秒自动锁屏
Settings.System.putInt(getContentResolver(),android.provider.Settings.System.SCREEN_OFF_TIMEOUT,15000);
五、解决系统应用升级还原问题
在build.gradle文件中,把versionCode版本号数字加大,覆盖安装即可,重启后不会还原
PS:如果本文章对您有所帮助,请点个赞让我知道哦~