Android:调用startService()后获取一个类

时间:2010-11-29 04:02:13

标签: android service android-activity

使用Android时,我对所有不同的术语感到困惑:活动,服务......

现在我创建了一项服务:

startService(new Intent(this, RingerServer.class));

此服务启动一个帖子:

public class RingerServer extends Service {

    public void onCreate() {
        super.onCreate();

        new Thread(new Ringer()).start();
    }

    public class Ringer implements Runnable { ... }

    public void refuseConnection() { ... }

}

在这个服务中,RingerServer,我也有我想要使用的方法。我想继续引用RingerServer。我基本上喜欢创建服务的Activity能够调用refuseConnection(),但不能使该方法静态。

startService返回一个ComponentName,所以我一直试图将它强制转换回RingerServer,但这似乎不起作用。我看到它有getClass(),我已经检查过,getClassName()给了我正确的类。我虽然没能正确使用getClass()。

有什么办法可以保留对新创建的RingerServer类的引用吗?我确信这是微不足道的,但我现在被困住了。

非常感谢,

詹姆斯

2 个答案:

答案 0 :(得分:0)

您有两个选择

1.Override onStartCommand of service并使用action启动服务器。该意图将在服务中接收,基于您可以调用refuseConnection()

的意图动作
//In Activity 
...
//Start the service 
Intent intent=new Intent("com.xx.xx.REFUSE_CONNECTION");
startService(this,intent);
...
//In Service 

public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        if(intent.getAction().equals("com.xx.xx.REFUSE_CONNECTION")){
            //Refuse the connection
            refuseConnection();
        }else {
            //Do something else
        }
}

//在清单中

<service android:name="RingerService">
     <intent-filter>
       <action android:name="com.xx.xx.REFUSE_CONNECTION"></action>
     </intent-filter>
</service>
  1. 实现AIDL接口并覆盖服务的onBind(),并使用此接口调用refuseConnection()。有关AIDL,请参阅此链接http://developer.android.com/guide/developing/tools/aidl.html

答案 1 :(得分:0)

您可以使用ServiceConnection访问您的服务类。请在此处查看示例代码:

Android service running after pressing Home key

也就是说,通过服务的onStart处理程序管理事物要简单得多。