2013-02-05 102 views
0

我有一個客戶端,需要一個將在後臺運行的間諜應用程序 - 接收消息,發送消息,GPS位置等。我可以啓動一個服務沒有用戶界面的活動?據我所知,我需要一個服務和接收器,我還需要打電話給接收器讓我們說低電池,電池好 - 一些經常觸發的意圖。我如何在模擬器上測試它?Android在後臺祕密運行應用程序

現在這是我

public class MyReceiver extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 

    if(intent.getAction() != null) 
    { 
     if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) || 
      intent.getAction().equals(Intent.ACTION_USER_PRESENT)) 
     { 
      context.startService(new Intent(context, MyService.class)); 
     } 
    // TODO Auto-generated method stub 

} 

}}

接收器和

public class MyService extends Service { 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onCreate() { 
super.onCreate(); 
Toast.makeText(this,"Service created ...",Toast.LENGTH_LONG).show(); 


} 
@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 


@Override 
public void onDestroy() { 
super.onDestroy(); 
Toast.makeText(this, "Service destroyed ...", 
Toast.LENGTH_LONG).show(); 

} 

}

服務。 我把這個在我的清單

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.services" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="4" 
    android:targetSdkVersion="4" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <service android:name=".MyService"></service> 
    <receiver android:name=".MyReceiver"></receiver> 
</application> 

我是一個好辦法嗎?

+3

這聽起來像一個間諜應用程序。你爲什麼做這個? –

+0

@Raghav科學! – EaterOfCode

回答

0

有兩個部分,以這樣的回答:

有可能預安卓3.0

高達的Android 2.3,應用程序可以對任何事件註冊的廣播接收器,當即使發生,他們將陸續推出。這可以是啓動完成,屏幕開/關,基本上任何東西。

這是不可能的3.0及以上

3.0引入了一個非常有用的條件於接收到事件廣播。您的應用程序必須已啓動至少一次纔會收到事件。如果用戶安裝您的應用程序,但從不打開它,即使您的應用程序中有爲其定義的接收器,也不會收到任何廣播。

另外,請記住,您的應用程序可以在任何時間點由用戶或系統本身強制停止。此外,運行ICS及更高版本的用戶可以選擇禁用應用程序,以確保它們永遠不會運行,除非手動重新啓用。你無法控制這兩種情況。

有一個萬無一失的間諜應用程序的唯一方法是把它燒到設備上的ROM中,這在瞄準多個設備時不是非常可行。

+0

好吧,這個人在安裝後會啓動一次。這是我第一次有一個用戶界面,但後來它必須不時在後臺運行......我怎麼測試這個,我可以在模擬器上做到這一點。我的代碼很好,我添加到清單<接收器android:name =「。MyReceiver」>

+0

您的代碼是正確的,但您需要一個活動來顯示第一次啓動。除此之外,你應該真的在設備上進行測試。 –

+0

我可以在手機上看到服務正在運行。我添加了一個Activity按鈕來啓動服務,一個停止它。 –

0

是的您可以在沒有用戶交互的情況下開始Service。但是,你肯定需要一些東西來觸發你的代碼「你開始服務的地方」是正確的嗎?

爲此,我可以建議你有一個更頻繁的意向的BroadcastReceiver,如Phone_state_change,"Incoming_mesage"Time_tick。所以當它發生時,你可以調用你的onReceive方法,並且你可以從那裏開始你的服務,你需要檢查服務是否已經運行正常?

我建議你定義一個stickyBroadcastReceiver。它在註冊後會立即致電onReceive,所以您也可以從start您的service

這就是我所做的,希望它適合你。讓我知道輸出。

快樂編碼。 :)