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:如果本文章对您有所帮助,请点个赞让我知道哦~微笑

posted @ 2017-10-29 21:32  Leytton  阅读(292)  评论(0编辑  收藏  举报