2013-02-02 10 views
7

से शुरू नहीं होता मुझे पता है कि इस सवाल से कई बार पूछा गया है, लेकिन अन्य सभी धागे ने मेरी समस्या का समाधान नहीं किया है, मुझे अपने कोड में कुछ भी गलत नहीं दिख रहा है। शायद मैं यहाँ कुछ याद किया, क्या कोई मेरी मदद कर सकता है?Android IntentService

आशय सेवा के लिए कोड:

package Services; 

import android.app.IntentService; 
import android.content.Intent; 
import android.widget.Toast; 

public class WifiSearchService extends IntentService { 

    /** 
    * A constructor is required, and must call the super IntentService(String) 
    * constructor with a name for the worker thread. 
    */ 
    public WifiSearchService() { 
     super("WifiSearchService"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); 
     return super.onStartCommand(intent,flags,startId); 
    } 

    /** 
    * The IntentService calls this method from the default worker thread with 
    * the intent that started the service. When this method returns, IntentService 
    * stops the service, as appropriate. 
    */ 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     // Normally we would do some work here, like download a file. 
    // For our sample, we just sleep for 5 seconds. 
     long endTime = System.currentTimeMillis() + 5*1000; 
     while (System.currentTimeMillis() < endTime) { 
      synchronized (this) { 
       try { 
        wait(endTime - System.currentTimeMillis()); 
       } catch (Exception e) { 
       } 
      } 
     } 
    } 

} 

एक स्विच flicking द्वारा सेवा शुरू:

package com.cdobiz.wifimapper; 

import Services.WifiSearchService; 
import android.os.Bundle; 
import android.app.Activity; 
import android.app.ActivityManager; 
import android.app.ActivityManager.RunningServiceInfo; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.CompoundButton; 
import android.widget.CompoundButton.OnCheckedChangeListener; 
import android.widget.Switch; 

public class MainActivity extends Activity { 

    private Context context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     context = this; 

     setContentView(R.layout.activity_main); 


     Switch serviceSwitch = (Switch) this.findViewById(R.id.switchService); 

     serviceSwitch.setChecked(isMyServiceRunning()); 

     serviceSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 

      @Override 
      public void onCheckedChanged(CompoundButton view, boolean state) { 

       if(state){ 
        startService(new Intent(context, WifiSearchService.class)); 
       }else{ 
        stopService(new Intent(context, WifiSearchService.class)); 
       } 
      } 

     }); 

    } 

    private boolean isMyServiceRunning() { 
     ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
     for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
      Log.v("debug", service.service.getClassName()); 
      if ("com.cdobiz.wifimapper.services.WifiSearchService".equals(service.service.getClassName())) { 
       return true; 
      } 
     } 
     return false; 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 

मैनिफ़ेस्ट:

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

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="17" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.cdobiz.wifimapper.MainActivity" 
      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=".services.WifiSearchService"></service> 
    </application> 

</manifest> 
+3

.services पैकेज में WifiSearchService है? यदि ऐसा नहीं है तो आपको। सेवा को हटा देना चाहिए। अगर यह सेवा नहीं मिल पाती है तो यह इसे शुरू नहीं करेगी, और यह कोई संकेत नहीं देता है कि यह इसे नहीं मिल सकता है, जो कि कष्टप्रद है। – Mgamerz

+1

हां, यह सेवाओं नामक पैकेज के अंदर है। – thedjaney

+1

मैं यह देखने के लिए लॉग इन कथन का एक गुच्छा फेंक दूंगा कि यह वास्तव में उस कोड तक पहुंच रहा है जो इसे लॉन्च करता है। सुनिश्चित नहीं है कि आपने अभी तक कोशिश की है क्योंकि आपका कोड इसे प्रदर्शित नहीं करता है। इसके अलावा आप पैकेज को सेवाओं के रूप में घोषित करते हैं, लेकिन मैनिफेस्ट इसे सर्विसेज के रूप में दिखाता है - क्या इसे पूंजीकृत किया जाना चाहिए? – Mgamerz

उत्तर

16

मैं बदलकर आपकी सेवा कार्य करने में सक्षम था पैकेज का नाम com.cdobiz.wifimapper.services पर और पैकेज का नाम बदलें मेनिफेस्ट में सेवा का।

+4

निष्कर्ष: पैकेज लोअरकेस से शुरू होना चाहिए .. धन्यवाद! – thedjaney

+0

@ thedjaney आपको इसका जवाब देना चाहिए .. धन्यवाद – Nabin

1

मैं

Intent intent = new Intent(this,UploadService.class); 
    this.startService(intent); 

का उपयोग कर मेरी सेवा

4

मैं एक ही समस्या थी शुरू करने के लिए के आधार पर अपना आशय सेवा शुरू नहीं के साथ एक समस्या को हल किया। मैंने क्लास कंटेंट कोड टेक्स्ट कॉपी करके इसे हल किया। फिर मैंने कक्षा को हटा दिया और पैकेज पर राइट क्लिक करके एक ही कक्षा बनाई -> नई -> सेवा -> सेवा (इरादा) फिर मैंने उसी कोड को कक्षा में चिपकाया और यह काम करता है।

मैं उम्मीद है कि यह किसी

6

लिए मददगार मुझे यकीन है कि service ऐप-प्रकट में पंजीकृत है बनाने के द्वारा समस्या का समाधान हो जाएगा।

0

मुझे एक ही समस्या थी। इसे हल करने के लिए मैं Intenservice वर्ग को नष्ट कर दिया, वाई से एक मैं एक नया वर्ग बनाया का उपयोग कर: सही क्लिक करें> नई> सेवा> सेवा (IntentService)