整理一下學來的兩種方法:
顯示歡迎畫面方法如下:
首先新建一個Activity作為歡迎畫面,將Manifest.xml中本來在Mainctivity注冊文件下的
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
放到新注冊的Activity下,使其首先啟動。
Activity的代碼如下:
import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Window; //歡迎界面 @SuppressLint("HandlerLeak") public class WelcomeActivity extends Activity{ private static final String S = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉標題欄 setContentView(R.layout.welcome); //啟動線程 Thread mt = new Thread(mThread); mt.start(); } private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); if((String)msg.obj == S) { //跳轉 Intent intent = new Intent(); intent.setClass(WelcomeActivity.this, MainActivity.class); WelcomeActivity.this.startActivity(intent); finish(); } } }; Runnable mThread = new Runnable() { @Override public void run() { // TODO Auto-generated method stub Message msg = mHandler.obtainMessage(); //延時3秒 try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } msg.obj = S; mHandler.sendMessage(msg); } }; }
首先使窗口全屏,顯示畫面,然后打開一個線程,在線程中延時3秒發送一個消息,在消息處理中跳轉到Mainctivity並且關閉WelcomeActivity。這樣就實現了開機歡迎畫面出現3秒的效果。
使程序自啟動的方法如下:
首先增加接收廣播機制,用來接收系統啟動時的廣播,接收到之后啟動程序:
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class BootBroadcastReceiver extends BroadcastReceiver { static final String action_boot="android.intent.action.BOOT_COMPLETED"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(action_boot)){ Intent ootStartIntent=new Intent(context,WelcomeActivity.class); ootStartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(ootStartIntent); } } }
添加權限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"> </uses-permission>
注冊:
<receiver android:name=".BootBroadcastReceiver" android:exported="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.HOME" /> </intent-filter> </receiver>
注:這種系統自啟動的方法完全在應用中實現,要等系統完全啟動出現主界面之后再啟動,就跟360安全衛士這樣的開機啟動功能。如果使自己的應用代替系統自己的Launcher,開機直接進入程序或者甚至自定義開機畫面,則要在Android源碼中修改。