前言

智能硬件不同于普通安卓手机,由于部署在工地现场,大多不会有专人维护

所以必须具备开机自启动、远程自动升级、自动重启、状态自动上报等功能

这篇博客,我们首先解决最简单的,开机自启动问题

注册权限


	<!-- 监听系统开机广播 -->
	<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

创建广播接收器


	public class BootReceiver extends BroadcastReceiver {
	
	    @Override
	    public void onReceive(Context context, Intent intent) {
	
	    }
	}

注册广播接收器


	<!-- 监听系统开机 -->
	<receiver android:name="com.android.app.hardware.biz_receiver.BootReceiver">
	    <intent-filter>
	        <action android:name="android.intent.action.BOOT_COMPLETED" />
	    </intent-filter>
	</receiver>

广播接收器执行任务


	@Override
	public void onReceive(Context context, Intent intent) {
	    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
	        Intent it = new Intent(context, SplashActivity.class);
	        it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	        context.startActivity(it);
	    }
	}

将应用安装到内存卡


	<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	    xmlns:tools="http://schemas.android.com/tools"
	    android:installLocation="internalOnly">
	</manifest>

注意事项

现在很多ROM镜像,都拦截了RECEIVE_BOOT_COMPLETED等广播

对于这种设备,除非能自己修改ROM,否则监听开机广播肯定不可能的了

这时就不要再浪费时间了,可以采用将APP设为桌面的方法来间接达到目的

还有一些厂商,需要自己设置允许开机自启动,加入启动白名单,才能收到该广播

将APP设置为桌面应用

这是一个投机取巧的方法

缺点就是,我们的应用会取代默认桌面,就没法切换到其它APP了,只能通过代码打开其它应用

但对于比较简单的智能硬件来说,有一个应用就够了


	<activity
	    android:name="com.android.app.hardware.biz_activity.SplashActivity"
	    android:screenOrientation="landscape">
	    <intent-filter>
	        <action android:name="android.intent.action.MAIN" />
	        <category android:name="android.intent.category.LAUNCHER" />
	        <category android:name="android.intent.category.MONKEY" />
	        <category android:name="android.intent.category.HOME" />
	        <category android:name="android.intent.category.DEFAULT" />
	    </intent-filter>
	</activity>

更多推荐