如何让APP随手机开机启动,然后自启动界面或自启动后台服务呢?
那么就要用到强大的广播接收者了。
还有要怎么防止自己的APP不被应用管理器杀死呢?
那么就要用到强大的服务了,而且还要用到两个服务。
以下Demo代码即可以实现以上两个功能。
先来个步骤吧:
1、 新建一个类并继承于 BroadcastReceiver
2、在清单文件中注册receiver
3、新建一个类并继承于Service
4、 在清单文件中注册 service
5、再新建一个类并继承于Service
6、 在清单文件中注册 service
注意的是:
两个服务的内容一样,区别只在销毁onDestory方法中启动另一个服务,这也是服务不被杀死的关键。
不说了,看代码。
清单文件
--/AutoOpenApp/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" http://schemas.android.com/apk/res/android" package="com.devwang.autoopenapp" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
<service android:name="com.devwang.autoopenapp.AutoOpenService" > </service> <service android:name="com.devwang.autoopenapp.AutoOpenServicer" > </service>
<receiver android:name=".BootBroadcastReciver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application>
</manifest>
布局文件
--/AutoOpenApp/res/layout/activity_main.xml
<RelativeLayout xmlns:android=" http://schemas.android.com/apk/res/android" xmlns:tools=" http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.devwang.autoopenapp.MainActivity" >
<TextView android:id="@+id/tv" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:textSize="60sp" android:text="开机自启APP" />
</RelativeLayout>
主界面
--/AutoOpenApp/src/com/devwang/autoopenapp/MainActivity.java
package com.devwang.autoopenapp;
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView;
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView text=(TextView) findViewById(R.id.tv); text.setText("这是一个自动启动的例子!"); System.out.println("Service oncreate"); Intent i = new Intent(this,AutoOpenService.class); startService(i); }
}
广播接收者
-- /AutoOpenApp/src/com/devwang/autoopenapp/BootBroadcastReciver.java
package com.devwang.autoopenapp;
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent;
//开机启动完成的 广播接受者 在这里启动APP Activity public class BootBroadcastReciver extends BroadcastReceiver { static final String ACTION = "android.intent.action.BOOT_COMPLETED";
@Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if (intent.getAction().equals(ACTION)) { //自启动界面 // Intent i = new Intent(context, MainActivity.class); // i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // context.startActivity(i); //自启动服务 Intent i = new Intent(context, AutoOpenService.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startService(i); } }
}
两个服务
第一个服务
--/AutoOpenApp/src/com/devwang/autoopenapp/AutoOpenService.java
package com.devwang.autoopenapp;
import android.app.Service; import android.content.Intent; import android.os.IBinder;
public class AutoOpenService extends Service {
@Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; }
@Override public void onCreate() { // TODO Auto-generated method stub super.onCreate();
System.out.println("Servicer ondestory"); }
@Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy();
System.out.println("Servicer ondestory"); Intent i = new Intent(this, AutoOpenServicer.class); startService(i); }
}
第二个服务
--/AutoOpenApp/src/com/devwang/autoopenapp/AutoOpenServicer.java package com.devwang.autoopenapp;
import android.app.Service; import android.content.Intent; import android.os.IBinder;
public class AutoOpenServicer extends Service {
@Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; }
@Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); System.out.println("Service onCreate"); }
//守护进程 在次方法中 本服务会被销毁 此时可以启动新的服务 @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); System.out.println("Service ondestory"); Intent i = new Intent(this,AutoOpenService.class); startService(i); }
}
OK
||
V
Gif
开机自启动后台服务Gif
http://bruceanne-gif.stor.sinaapp.com/autoservice.gif
两进程互相守护防被杀死与单进程比较Gif
http://bruceanne-gif.stor.sinaapp.com/doubleservice.gif
Gif
A
||
OK
(源自it黑马的视频教程)