Android 後臺每10秒鐘啟動一次應用的demo,一次啟動,永不退出
阿新 • • 發佈:2018-12-31
我們的廣告系統,為了防止被客戶關閉,必須要每隔一段時間啟動一次。
建立一個Service:
最關鍵的是onStartCommand 裡面返回的Service.START_STICKY,
return Service.START_STICKY
清單檔案中:package com.wbm.app.servicetest.servic; import android.app.Service; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.IBinder; import android.util.Log; import android.view.View; import android.widget.Toast; import java.util.List; public class StartService extends Service implements Runnable{ private Thread thread; public StartService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. //throw new UnsupportedOperationException("Not yet implemented"); return null; } @Override public void onCreate() { super.onCreate(); //onCreate的時候建立初始化 thread = new Thread(this); thread.start(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // return super.onStartCommand(intent, flags, startId); //如果服務並停止了,重新生成一個新的 if(thread.isInterrupted()){ thread = new Thread(this); thread.start(); } return Service.START_STICKY; } @Override public void run() { int i=0; while (true){ try { //每10秒鐘進行一次輸出 Thread.sleep(10000); //Toast.makeText(getApplicationContext(),"服務啟動"+i++,Toast.LENGTH_LONG).show(); Log.d("kodulf", "服務啟動"+i++); openApp("com.wbm.app.tvad"); } catch (InterruptedException e) { e.printStackTrace(); } } } // private void openApp(View v, String packageName) { private void openApp(String packageName) { //Context context = v.getContext(); PackageInfo pi = null; //PackageManager pm = context.getPackageManager(); PackageManager pm = getPackageManager(); try { pi = pm.getPackageInfo(packageName, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(pi.packageName); List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 0); ResolveInfo ri = apps.iterator().next(); if (ri != null ) { packageName = ri.activityInfo.packageName; String className = ri.activityInfo.name; Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName(packageName, className); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(cn); startActivity(intent); } } }
<service
android:name=".servic.StartService"
android:enabled="true"
android:exported="true"></service>