Android開機自啟動(activity或service)

Android開機自啟動(activity或service)

5 人贊了文章

Android手機在啟動的過程中會觸發一個Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED(記得只會觸發一次呀),在這裡我們可以通過構建一個廣播接收者來接收這個這個action。必須要注意的一點是:這個廣播必須的靜態註冊的,不能是動態註冊的廣播(這種接受開機廣播的,一定要靜態註冊,這樣應用還沒運行起來時也照樣能夠接收到開機廣播 ,動態廣播就不行了)。

在裝上demo讓demo運行後,先關機,再啟動。也就是說裝上應用運行後,一定要重啟機器。

如果失敗:看看有沒有裝360之類的被限制,還有手機自帶的管理自啟動的軟體,進去點擊允許;

加入許可權:<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

運行方式: adb shell am startservice -n 包名/包命.TestService //manifest中的service name

adb模擬開機:adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

1、註冊開機廣播,在清單文件中註冊:

<receiver

android:name=".MyReceiver"

android:enabled="true"

android:exported="true">

<intent-filter android:priority="1000">

<action android:name="android.intent.action.BOOT_COMPLETED"></action>

</intent-filter>

</receiver>

<service android:name="com.example.openandroid.MyService">

<intent-filter >

<action android:name="com.example.openandroid.MyService" /> //必須是全名

<category android:name="android.intent.category.default" />

</intent-filter>

</service>

2.在開機廣播的onReceive方法裡面做跳轉:

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

public class MyReceiver extends BroadcastReceiver

{

public MyReceiver()

{

}

@Override

public void onReceive(Context context, Intent intent)

{

if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))

{

// Intent i = new Intent(context, MainActivity.class);

// i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

// context.startActivity(i);

Intent i = new Intent(context, MyService.class);

context.startService(i);

}

}

}

3.MainActivity

mport android.app.Activity;

import android.content.ComponentName;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.widget.Toast;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Toast.makeText(this, "哈哈,我成功啟動了!", Toast.LENGTH_LONG).show();

Log.e("AutoRun","哈哈,我成功啟動了!");

}

}

4.MyService

import android.app.Service;

import android.content.ComponentName;

import android.content.Intent;

import android.os.IBinder;

public class MyService extends Service {

@Override

public IBinder onBind(Intent intent) {

// TODO Auto-generated method stub

return null;

}

@Override

public void onStart(Intent intent, int startId) {

// TODO Auto-generated method stub

super.onStart(intent, startId);

Intent i = new Intent(Intent.ACTION_MAIN);

i.addCategory(Intent.CATEGORY_LAUNCHER);

ComponentName cn = new ComponentName(packageName, className);

i.setComponent(cn);

startActivity(i);

}

推薦閱讀:

Android應用開發之(你必須知道的ListView方法)
Android應用簽名

TAG:Android開發 | Android應用 | Android |