2013-06-10 17 views
6

Wprowadzam następujący kod, w którym chcę uruchomić usługę przy użyciu odbiornika transmisji. Toast w odbiorniku transmisji działa dobrze, ale usługa nie jest wykonywana. Czy ktoś może mi powiedzieć, gdzie popełniłem błąd?Usługa uruchamiania systemu Android przy użyciu odbiornika transmisji

MyReceiver.class 
public class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     // TODO Auto-generated method stub 
     //Toast.makeText(arg0, "Service", Toast.LENGTH_LONG).show(); 
     Intent myIntent = new Intent(arg0,MyS.class); 
     arg0.startService(myIntent); 
    } 
} 


MyS.class 
public class MyS extends Service { 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getBaseContext(), "Service started", Toast.LENGTH_LONG).show(); 
     return START_STICKY; 
    } 
} 


AndroidManifest.xml 

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

    <uses-sdk android:minSdkVersion="8" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <service android:enabled="true" 
      android:name=".MyS" > 
      <intent-filter> 
       <action android:name="com.test.p.MyS" > 
       </action> 
      </intent-filter> 
     </service> 

     <receiver android:enabled="true" 
      android:name=".MyReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 
+0

Należy zarejestrować transmisję w celu otrzymywania aktualizacji i wyrejestrować ją, gdy nie będzie ona korzystać z czynności. \t 'super.registerReceiver (mLoggedOutReceiver, new IntentFilter (LOG_OUT_ACTION));' – nesimtunc

+0

Próbowałem, że oba sposoby ... rejestrowanie w manifeście Android iw klasie Nadal usługa nie jest uruchamiana. Czy możesz wysłać przykładowy kod lub link o tym, jak to zrobić? – Spike

+0

Czy odpowiedź tutaj działa dla Ciebie? http://stackoverflow.com/questions/4641712/starting-service-from-broadcastreceiver –

Odpowiedz

-1

W swojej działalności, tworzenie BroadcastReceiver zmienną

private BroadcastReceiver mBootCompletedReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
       // start your service right here... 
     } 
    }; 

i onCreate lub onResume wydarzenia Activity należy zarejestrować się na tej BroadcastReceiver

super.registerReceiver(mBootCompletedReceiver, new IntentFilter("android.intent.action.BOOT_COMPLETED")); 

i onDestory lub OnStop lub OnPause Cokolwiek w tej sytuacji powinien wyrejestrować program BroadcastReceiver, aby nie otrzymywać już tych aktualizacji.

super.unregisterReceiver(mBootCompletedReceiver); 
-3

Usługa zostanie uruchomiona tylko wtedy, gdy istnieje metoda oczekiwania, która została podana w usłudze startowej. Oznacza to, że musisz uruchomić niektóre działania odbiornika, takie jak połączenie lub sms, aby uruchomić usługę. U może zamiast tego uruchomić usługę po uruchomieniu. Wygoogluj to.

Powiązane problemy