28

我已經創建了一個活動,只能從鏈接啓動(使用意圖過濾器)。我不希望此活動具有GUI - 我只是希望它啓動一個服務並且在酒吧中發出通知。我試圖將鏈接的意圖過濾器放在我的服務中,但這不起作用。有沒有更好的做法可以迴應意向過濾器 - 或者我可以讓我的活動沒有GUI?
對不起,如果我很困惑,艾薩克沒有GUI的Android活動

+0

我現在認識到,活動只是GUI,這就是他們的目的,所以我將不得不使用服務或別的東西。謝謝Isaac – 2009-02-08 23:44:51

回答

19

你最好的選擇似乎是使用BroadcastReceiver。您可以創建一個新的廣播接收器監聽的意圖來觸發您的通知,並開始爲您服務是這樣的:

public class MyIntentReceiver extends BroadcastReceiver {  
    @Override 
    public void onReceive(Context _context, Intent _intent) { 
    if (_intent.getAction().equals(MY_INTENT)) { 
     // TODO Broadcast a notification 
     _context.startService(new Intent(_context, MyService.class)); 
    } 
    }  
} 

而且你可以在此IntentReceiver直接在應用程序清單,而無需一個活動中包括其註冊:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.domain.myapplication"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <service android:enabled="true" android:name="MyService"></service> 
    <receiver android:enabled="true" android:name="MyIntentReceiver"> 
     <intent-filter> 
     <action android:name="MY_INTENT" /> 
     </intent-filter> 
    </receiver> 
    </application> 
</manifest> 
+0

請告訴我什麼是_intent.getAction()。equals(MY_INTENT)中的MY_INTENT,抱歉,如果我聽起來天真,我只是一個初學者。 – 2010-02-18 12:33:49

+0

你可以使用任何你想要識別你的意圖的字符串。它必須是獨一無二的。我建議你使用「your.package.name.START_SERVICE」 – 2010-08-17 18:28:30

4

我不確定服務是否可以工作,但廣播接收器肯定不會。網址是使用startActivity()啓動的。廣播接收機無法對此做出響應。

http://developer.android.com/reference/android/content/BroadcastReceiver.html

FTA: 需要注意的是,雖然Intent類用於發送和接收這些廣播,這裏的意圖廣播機制是完全獨立於被用於啓動與Context.startActivity活動的Intent() 。 BroadcastReceiver無法查看或捕獲與startActivity()一起使用的Intents;同樣,當您廣播一個意圖時,您將永遠不會找到或啓動一個活動。

3

使用服務。我工作肯定。當你點擊程序時,它會在沒有任何GUI的情況下完成它的工作。使用pendintgintent ... getService(MySerice.class ....)。然後,創建一個擴展Service類的新類MyService。在MyService.class中,重寫onStart()並做任何你想做的事情。

93

迴應以前的迴應,你不應該使用廣播接收器。

在相同的情況下,我所做的就是申報正是如此主題:

<activity android:name="MyActivity" 
      android:label="@string/app_name" 
      android:theme="@android:style/Theme.NoDisplay">