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">