2016-10-10 2 views
0

Я попытался прочитать доступные маяки в area.below уровня API 21 я должен использовать BluetoothAdapter.LeScanCallback и выше 21 у меня есть использовать ScanCallbackсила App близко при чтении ScannCallback

когда я бег моего приложения на KitKat это отсканировано маяк. Но когда я бегу мое приложение на леденец, он имеет принудительно закрыть и показывает эту ошибку

java.lang.NoClassDefFoundError: test.abc.com.mybeacon.Beacon$2 

«Маяк» моя деятельность класса

Это мой код:

private BluetoothLeScanner mBluetoothLeScanner; 
    private ScanCallback mScanCallback; 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_beacon); 

     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 
       //JellyBean/Kitkat 
       mBluetoothAdapter.startLeScan(mLeScanCallback); 
      } else { 
       //lollipop+ 
       mScanCallback = new ScanCallback() { 
       @Override 
       public void onScanResult(int callbackType, ScanResult result) { 


       processResult(result); 
        } 
       }; 
       startScan(); 
      } 

    } 

    private void startScan() { 
      mBluetoothLeScanner.startScan(mScanCallback); 
     } 

    private void stopScan() { 
      mBluetoothLeScanner.stopScan(mScanCallback); 
     } 
     private void processResult(ScanResult result) { 

      Log.d("res"," "+result.getDevice().getName().toString()); 
     } 
} 
+0

В чем разница между тем, когда он работает и когда он не работает? – davidgyoung

+0

Я тестировал это приложение на kitkat.when с приложением «mScanCallback» приложение crashed.without «mScanCallback» приложение работает. Но я хочу «mScanCallback» для sdk> 21 устройства для сканирования маяка – vindy

ответ

0

You попробуйте создать экземпляр ScanCallback на устройствах с Kitkat и ниже, но они не знают класс ScanCallback, поскольку он был добавлен в Lollipop. Я предлагаю создать экземпляр ScanCallback в методе onCreate, там вы можете проверить, работает ли устройство Lollipop или новее.

Редактировать: Только для уточнения, это не с той же ошибкой или вы получаете другую ошибку?

private BluetoothLeScanner mBluetoothLeScanner; 
    private ScanCallback mScanCallback; 

    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_beacon); 

      if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 
       //JellyBean/Kitkat 
       mBluetoothAdapter.startLeScan(mLeScanCallback); 
      } else { 
       //lollipop+ 
       mScanCallback = new ScanCallback() { 
        @Override 
        public void onScanResult(int callbackType, ScanResult result) { 
         processResult(result); 
        } 
       }; 
       startScan(); 
      } 

    } 

    private void startScan() { 
      mBluetoothLeScanner.startScan(mScanCallback); 
    } 

    private void processResult(ScanResult result) { 
      Log.d("res"," "+result.getDevice().getName().toString()); 
    } 
} 
+0

, но у меня есть проверка Oncreate.it's check ниже, чем леденец и прямо к методу. Также у меня есть проверка ScanCallback в Oncreate.not work.same error – vindy

+0

Вы используете статическую инициализацию для ScanCallback, она попытается инициализировать ее, как только ваш класс будет инициализирован. Просто объявите ScanCallback и инициализируйте его в методе onCreate, если ОС Lollipop или выше – p2pkit

+0

Я добавил. Затем он считывал маяк и разбился, как раньше. – vindy