1

Я хочу запустить сервис по включению/выключению Bluetooth. Но я столкнулся с некоторыми проблемами. Вот несколько вещей. Здесь нет манифеста:BroadcastReceiver не найден в манифесте

<application android:label="JustAnyLabel"> 

     <receiver android:name=".MyBroadcastReceiver"> 
      <intent-filter> 
       <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" /> 
      </intent-filter> 
     </receiver> 

</application> 

Вот BroadcastReceiver:

public class MyBroadcastReceiver : BroadcastReceiver 
{ 
    private Intent theServiceIntent; 
    public MyBroadcastReceiver() : base() 
    {} 

    public override void OnReceive (Context context, Intent intent) 
    { 
     string action = intent.Action; 

     if (action.Equals (BluetoothAdapter.ActionStateChanged)) 
     { 
      int state = intent.GetIntExtra (BluetoothAdapter.ExtraState, BluetoothAdapter.Error); 

      bool bluetoothEnabled = BluetoothAdapter.DefaultAdapter.IsEnabled; 

      switch (bluetoothEnabled) 
      { 
      case false: 
       if(theServiceIntent != null) 
       { 
        context.StopService (theServiceIntent); 
        theServiceIntent = null; 
       } 
       break; 


      case true: 
       if(theServiceIntent == null) 
       { 
        theServiceIntent = new Intent (context, typeof(TheService)); 
        context.StartService (theServiceIntent); 
       } 
       break; 
      } 
     } 
    } 
} 

А вот ошибка: enter image description here

Так в основном, мой класс не был найден, и у меня нет идея почему. Любая помощь будет оценена по достоинству.

Спасибо.

+0

MyBroadcastReceiver - это класс java? –

+0

нет, я использую Xamarin Studio, поэтому все его C# :) –

+0

, тогда вы не знаете, как объявить класс в андроиде? –

ответ

0

И вот решение:

  • Не помещайте приемник тег в манифесте, если вы работаете на Xamarin студии

  • Убедитесь, что цель вы передаете является правильным (для переключения с поддержкой BLUETOOTH =>android.bluetooth.adapter.action.STATE_CHANGED)

  • Кроме того, в вашем BroadcastReceiver классе, написать аннотацию [BroadcastReceiver] и в Service классе, написать аннотацию [Service]

+0

ПОЖАЛУЙСТА, НЕ ПИШИТЕ ВАШ ОТВЕТ В ВЕРХНИХ БУКВАХ! Это действительно заставляет вас казаться, что вы кричите! – Cheesebaron

+0

: P правый, исправляющий его сейчас –

0

У меня такая же проблема, и эта работа отлично подходит для меня. Это регистрация:

<receiver android:name="packagename.BluetoothBR"> 
      <intent-filter> 
       <action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/> 
      </intent-filter> 
</receiver> 

И приемник:

общественного класс BluetoothBR расширяет BroadcastReceiver {

@Override 
public void onReceive(Context context, Intent intent) { 
    final String action = intent.getAction(); 

    if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { 
     Intent intentB; 
     final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 
       BluetoothAdapter.ERROR); 
     switch (state) { 
      case BluetoothAdapter.STATE_OFF: 
       // Stop service... 
       break; 
      case BluetoothAdapter.STATE_TURNING_OFF: 
       // stop service.... 
       break; 
      case BluetoothAdapter.STATE_ON: 
       // init service ... 
       break; 

     } 
    } 
} 

}

Надеется, что это помогает !! :)

+0

Вы имеете в виду, что все имя пакета перед именем класса в манифесте ?? Ошибка развертывания. развертывания не удалось из-за внутренней ошибки: Неожиданное установить вывод: \t PKG: /data/local/tmp/Estimotes.Estimotes-Signed.apk Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED] –

+0

вы должны поставить имя пакета, например, как это: com.name.package.YourReceiver –

+0

это мое имя пакета MyPackage.MyPackage Так он становится: MyPackage.MyPackage.MyBroadcastReceiver и эта линия дает мне ошибку, упомянутую в предыдущем комментарии –

Смежные вопросы