Пробую выводить изображения, снятые камерой, и отображать их в приложении. Когда я беру изображения с низким -разрешением (скажем размером 100кБ ), у меня нет проблем с переключением на растровое отображение, минусы, когда я беру их в высоком разрешении (1,5 МБ ), приложение вылетает с исключением
Error java.lang.OutOfMemoryError.
бывает на моем смартфоне (Samsung Galaxy SII, Galaxy SIII )есть на всех полках. Пока я решил вручную, понизив качество и размер фотографий, но, учитывая эволюцию камер с увеличением разрешения, эта проблема, вероятно, будет возникать чаще. Нет ли постоянного решения для увеличения памяти, выделенной моему приложению для Android, без ручного вмешательства в устройство и в код?
Изображения сохраняются в растровом формате
//image creation
Uri domuri1
ContentValues cv = new ContentValues();
cv.remove("101");
domuri1 = getContentResolver().insert(Media.EXTERNAL_CONTENT _URI, cv);
File domthumb1 = new File(domuri1.toString(), fileName1);
//increment photo apparate
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, domuri1);
startActivityForResult(intent, 100);
//images save
ContentResolver cr = getContentResolver();
bitmap1 = MediaStore.Images.Media.getBitmap(cr, domuri1 );
imageView.setImageBitmap(bitmap1);
-. 121 ---1334716-
Я сканирую свое периферийное устройство вот так:
NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO]
forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
// Scan for peripherals with given UUID
[cm scanForPeripheralsWithServices:[NSArray arrayWithObject:HeliController.serviceUUID] options:scanOptions]
Нет проблем, я нахожу периферийное устройство и могу к нему подключиться. Как видите, я даю CBCentralManagerScanOptionAllowDuplicatesKey
с bool NO
, чтобы не допускать более одного периферийного устройства, но иногда обратный вызов didDiscoverPeripheral
срабатывает дважды.
- (void) centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
{
if(!discovered){
discovered = YES;
NSLog(@"Discovered");
[cm stopScan];
[scanButton setTitle:@"Connect" forState:UIControlStateNormal];
}
else if(discovered){
discovered = YES
NSLog(@"Already discovered");
}
}
Иногда я получаю
Discovered
Already discovered
как вывод в моей консоли, и в большинстве случаев отображается только сообщение Discovered
.
В моем периферийном делегате я сначала обнаруживаю службы, которые затем вызывают [peripheral discoverCharacteristics
, и всегда происходит обратный вызов :
- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{
NSLog(@"Did discover characteristic for service %@", [service.peripheral UUID]);
for(CBCharacteristic *c in [service characteristics]){
// We never get here when peripheral is discovered twice
if([[c UUID] isEqual:myCharacteristicUUID]){
NSLog(@"Found characteristic");
self.throttleCharacteristic = c;
}
}
. Когда didDiscoverPeripheral
встречается дважды, service
становится nil
в этом методе, хотя peripheral
не является (UUID, имя по-прежнему правильное ).
Перезагрузка телефона или сброс настроек сети временно устраняет проблему.
Мне очень нужно это исправить! Спасибо