2012-05-14 6 views
0

Я хочу, чтобы запустить службу, используя BroadcastReceiver с этим кодомНе удалось запустить службу с помощью радиоприемников

public void onReceive(Context context, Intent intent) { 

    Intent myIntent = new Intent(context,BlueToothService.class); 

    context.startService(myIntent); 

} 

Но не может запустить службу. Я также зарегистрировал услугу и получатель в манифесте.

И у меня также есть одно сомнение, можем ли мы использовать широковещательный приемник без активности?

Это мой класс обслуживания

public class BlueToothService extends Service { 

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

@Override 
public void onStartCommand(Intent intent, int startId) { 

    super.onStart(intent, startId); 
    Toast.makeText(this, "service Started", Toast.LENGTH_LONG); 
    doBluetoothJob(); 

} 

Мой файл манифеста выглядит следующим образом.

<uses-permission android:name="android.permission.BLUETOOTH" /> 
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 
    <uses-permission android:name="android.permission.BROADCAST_SMS" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
    </application> 

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

    <receiver android:name="com.simsys.bt.DemoBT" > 
    </receiver> 

    <intent-filter> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
+0

Как вы сказали, что услуга не началась? И да - вы можете использовать 'BroadcastReceiver' без' Activity'. Например, вы можете зарегистрировать приемник в «Сервис», или, как вы уже сделали, вы можете зарегистрировать его в манифесте. – curioustechizen

+0

Ваш вопрос не содержит слишком много деталей. Что вы подразумеваете под «нерабочим» - не называется ли трансляция? Не вызвана ли услуга? вы видите какую-то ошибку? кто звонит в эфир? – MByD

+0

Хорошо .. это мой класс обслуживания ... –

ответ

6

Это работает со мной, я создал приемник.

public class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Toast.makeText(context, "MyReceiver Started", Toast.LENGTH_SHORT).show(); 
     Intent myIntent=new Intent(context,MyService.class);   
     context.startService(myIntent); 
    } 
} 

затем создать Simple Service

public class MyService extends Service { 

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

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId){ 
     Toast.makeText(getBaseContext(), "Service Started", Toast.LENGTH_SHORT).show(); 
     // We want this service to continue running until it is explicitly 
     // stopped, so return sticky. 
     return START_STICKY; 
    } 
} 

не забудьте сделать запись для вещательного приемника и службы в файле манифеста

<application android:icon="@drawable/icon" android:label="@string/app_name">   
<service 
    android:enabled="true" 
    android:name=".MyService"> 
    <intent-filter> 
     <action 
      android:name = "com.rdc.MyService"> 
     </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> 

теперь после перезагрузки появится эмулятор Toast.

+0

Hi Ramdhan Я сделал то же самое без активности. но, похоже, он не работает. –

+0

@MrNice Хорошо! проверьте здесь, я загрузил пример кода http://rdcworld-android.blogspot.in/2012/03/start-service-from-broadcast-receiver.html – swiftBoy

+0

@ Ramdhan Choudhary .. PLS запустите свой код в эмуляторе и см. In Enmulator Running Services не отображается. –

0

Вы должны переопределить onStartCommand() не OnStart() в подклассе Service. onStart() обесценивается, он все равно должен быть вызван, но было бы рекомендовано переопределить onStartCommand() и посмотреть, работает ли это.

Кроме того, в вашем файле манифеста теги сервиса, получателя и тэга-фильтра должны быть дочерними элементами тега приложения. Получателю также необходимо объявить, какие намерения он будет обрабатывать. например

<receiver android:name="com.simsys.bt.DemoBT" > 
    <intent-filter> 
     <action android:name="com.simsys.bt.intents.StartService" /> 
    </intent-filter>  
</receiver> 
+0

Да .. Мистер Чарльз Харли. Но он также не показывает тост. –

+0

Не могли бы вы также опубликовать часть своего манифеста, объявляющую службу? –

+0

ok .. pls см. Мое редактирование. –

0

Try показывая свой тост с:

Toast.makeText(this, "service Started", Toast.LENGTH_LONG).show(); 

И вам необходимо предоставить декларацию службы в манифесте с определенной IntentFilter с целью вы хотите, чтобы слушать нравится:

<receiver android:name="com.simsys.bt.DemoBT" > 
    <intent-filter> 
     <action android:name="your.intent.action.definition" /> 
    </intent-filter>  
</receiver> 
1

Файл манифеста, который вы опубликовали, неправильно сформулирован. Знаки <service> и <receiver> должны быть внутри<application> тег. Пример:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <service 
     android:name=".BlueToothService" 
     android:enabled="true" > 
    </service> 
    <receiver android:name="com.simsys.bt.DemoBT" > 
    </receiver> 
</application> 
+0

Здравствуйте @David Wasser, я все еще не мог видеть тост. –

+0

Интересно. Вы делаете это на реальном устройстве? Что такое устройство? На данный момент, поскольку ни одно из многих предложений, по-видимому, не поможет вам, вероятно, вам следует опубликовать свой текущий код, ваш текущий манифест и любой логарифм, который может быть полезен. –

+1

Спасибо, господин Дэвид Вассер .. теперь он работает. Извините, я забыл поставить Action Tag в Receiver. –