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); }
推薦閱讀: