2012-06-30 151 views
1

对于你们来说,这可能是一个简单的问题,但它是我第一次尝试创建一个应用程序,当我的应用程序关闭时应该在后台运行。我的问题是:当我点击我的“启动服务”按钮时,服务无法启动。我没有看到任何敬酒,也没有看到logcat(也没有错误)。提前致谢!服务未启动

服务类

public class MyService extends Service { 
private static final String TAG = "MyService"; 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onCreate() { 
    Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "onCreate"); 

} 

@Override 
public void onDestroy() { 
    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "onDestroy"); 

} 

@Override 
public void onStart(Intent intent, int startid) { 
    Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "onStart"); 

} 
} 

我的主要活动

public void startServiceClick(View v){ 

    Log.d("foo", "onClick: starting srvice"); 
    startService(new Intent(this, MyService.class)); 
} 

public void stopServiceClick(View v){ 

    Log.d("foo", "onClick: stopping srvice"); 
    stopService(new Intent(this, MyService.class)); 
} 

清单XML

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="se.johanberntsson.main" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="15" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.BLUETOOTH"/> 

<application 
    android:icon="@drawable/maps1" 
    android:label="@string/app_name" > 
    <uses-library android:name="com.google.android.maps" /> 
    <activity 
     android:name=".LongitudeActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".DebugActivity" /> 
    <activity android:name=".GoogleMapsActivity" /> 

    <service android:enabled="true" android:name=".MyService" /> 

</application> 

</manifest> 
+0

你有没有尝试过context.startService? 正在启动服务日志是gettting生成的吗? – AAnkit

+0

@AnkitAwasthi现在试过了,没有成功。是的,我在日志中获得了“onclick,starting service”。但没有任何服务..:/ – Johan

+0

我认为答案张贴可以解决您的问题。如果不是发布完整的活动代码,将尝试我的设置.. – AAnkit

回答

4
this is suggestion as all else looking fine 

应该叫超级每个函数一样super.onCreate();

的可能服务已经启动,并尝试停止和重新启动,并检查它似乎敬酒....

尝试

<service android:enabled="true" android:name="se.johanberntsson.servies.MyService" /> 
+1

http: //mobile.dzone.com/articles/android-services –

+1

没有运气...你确定它需要吗? http://marakana.com/forums/android/examples/60.html – Johan

+0

这是建议,因为所有其他看起来很好 –

0

我将你的服务添加到我的代码中,它对我来说工作正常。请参阅下面的代码并与您的相匹配。

活动>>

public class TestActivity extends Activity implements OnClickListener { 
    /** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button bt = (Button)findViewById(R.id.button11); 
    bt.setOnClickListener(this); 
} 


public void startServiceClick(View v){ 

    Log.d("foo", "onClick: starting srvice"); 
    startService(new Intent(this, MyService.class)); 
} 

public void stopServiceClick(View v){ 

    Log.d("foo", "onClick: stopping srvice"); 
    stopService(new Intent(this, MyService.class)); 
} 

@Override 
public void onClick(View v) { 
    startServiceClick(v); 

} 

清单文件>>

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

<uses-sdk android:minSdkVersion="8" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".TestActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <service android:enabled="true" android:name=".MyService" /> 

</application> 

+0

是的,我匹配。除了我不使用onclicklistener。只是'onClick'属性在xml。但点击获取记录,所以我猜那是不是问题 – Johan

+0

哦好吧..尝试添加onclicklistener然后,。,Android不是那么成熟...可能是你的代码愚蠢的事 – AAnkit

+0

我认为问题可能是我的服务是在一个不同的包叫'se.johanberntsson.services'? – Johan

1

您可能已经想通了这一点。在你的代码中,你可以重写几个本地函数,以便添加一个toast和一个catlog条目。不要忘记添加超级{无论你正在调用的函数}。它所做的就是告诉android设备在功能没有被覆盖的情况下执行的功能,然后执行额外的功能。在你的情况下,如果你打电话给你的oncreate函数,那么计算机将做出敬酒并添加一个catlog条目,但它不会创建该服务。但是,如果您添加super.onCreate,手机将创建该服务,然后它将执行您要求的操作。

@Override //forget about doing whatever onCreate usually does. 
    public void onCreate() { 
     super.onCreate(); // do whatever onCreate usually does. Then do whatever is after me. 
     Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();//toast 
     Log.d(TAG, "onCreate");//Add message to cat- log 

    } 

我希望这会有所帮助。