編輯:關於Android編程
Manifest.xml文件:
復制代碼 代碼如下:
<service
android:name=".DaemonService"
android:enabled="true"
android:process=".DaemonService" >
<intent-filter android:priority="1000">
<action android:name="cn.test.DaemonService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
注釋:因為我們這個服務要一直在後台運行,所以不采用bindService的方式,而是直接采用startService的方式。
這樣就不至於我們的程序結束,也把我們的服務也結束掉了。
復制代碼 代碼如下:
package cn.start.test;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.Service;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
public class DaemonService extends Service {
private static final String TAG = "Alarmreceiver";
Handler hd1 = new Handler();
int delay = 5000;
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@SuppressLint("NewApi")
public void onCreate() {
System.out.println("服務啟動成功。。。。。。。。。。");
hd1.postDelayed(mTasks, delay);
}
private Runnable mTasks = new Runnable() {
@SuppressLint("NewApi")
public void run() {
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_FOREGROUND);
if (checkMainAppIsActive()) {
Log.d(TAG, "服務檢測主應用還在運行");
} else {
Log.d(TAG, "服務檢測主應用已經關閉");
Intent intent = getPackageManager().getLaunchIntentForPackage(
"cn.start.test");
if (intent != null) {
DaemonService.this.startActivity(intent);
Log.d(TAG, "服務啟動主應用程序。");
} else {
Log.d(TAG, "服務檢測到沒有安裝主應用,自動退出。");
return;
}
}
hd1.postDelayed(mTasks, delay);
}
};
/**
* 檢測是否主程序是否還在運行
* @return
*/
@SuppressLint({ "NewApi", "NewApi" })
public boolean checkMainAppIsActive(){
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
//獲取正在運行的應用
List<RunningAppProcessInfo> run = am.getRunningAppProcesses();
for(RunningAppProcessInfo ra : run){
if(ra.processName.equals("cn.start.test")){
return true;
}
}
return false;
}
}
開機自動啟動程序,自然少不了開機啟動廣播了。
manifest.xml 文件:
復制代碼 代碼如下:
<receiver android:name=".StartupReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
復制代碼 代碼如下:
public class StartupReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Intent i = new Intent(context,LoginActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
Intent serviceIntent = new Intent(context,DaemonService.class);
context.startService(serviceIntent);
}
}
總結:開機啟動廣播一定在manifest文件中注冊好。定時器要注意定時延遲。
通過List<RunningAppProcessInfo> run = am.getRunningAppProcesses();判斷自己的進程是否還在運行
通過getPackageManager().getLaunchIntentForPackage( "cn.start.test"); getPackageManager().getLaunchIntentForPackage( "cn.start.test");
來啟動自己的程序。
本文的目的是要實現左右滑動的指引效果。那麼什麼是指引效果呢?現在的應用為了有更好的用戶體驗,一般會在應用開始顯示一些指引幫助頁面,使用戶能更好的理解應用的功能,甚至是一些
本案例知識是:後台執行定時任務。Alarm機制:一、創建LongRunningService類 package com.example.servicebestp
前言當前的網絡開源庫有許多,如volley,okhttp,retrofit等,這三個庫當前是比較火的,其中,okhttp和retrofit由square團隊開發。關於這
實現更新下載進度的功能1. 通過廣播交互Server端將目前的下載進度,通過廣播的方式發送出來,Client端注冊此廣播的監聽器,當獲取到該廣播後,將廣播中當前的下載進度