2012-04-23 8 views
3

Я пытаюсь реализовать функцию в своем приложении, где она может пульсировать вибратор. Пользователь может изменить 3 вещи: силу вибрации, длительность импульса и время между импульсами, используя ползунки.Проблемы с пульсирующим вибратором

Я думал о какой-то код, как:

for(i=0; i<(pulse length * whatever)+(pulse gap * whatever); i+=1){ 
pattern[i]=pulse length*i; 
patern[i+1]=pulse gap; 

Однако, когда я использую этот код (если его все сделано правильно, вот только быстрый пример) он разбивает приложение. Кроме того, когда я меняю силу вибрации (которая работает), я должен перезапустить службу для изменения силы. То, как я меняю силу, - это изменение времени, в течение которого вибратор включается, и отключается в шаблоне.

Это код, который я использую для обнаружения, как телефон должен вибрировать (код здесь немного отличается от того, что я предпочел бы):

if (rb == 3){ 
    z.vibrate(constant, 0); 
} else if (rb == 2){ 
    smooth[0]=0; 
    for (int i=1; i<100; i+=2){ 
      double angle = (2.0 * Math.PI * i)/100; 
      smooth[i] = (long) (Math.sin(angle)*127); 
      smooth[i+1]=10; 
    } 
    z.vibrate(smooth, 0); 
} else if (rb == 1){ 
    sharp[0]=0; 
    for(int i=0; i<10; i+=2){ 
      sharp[i] = s*pl; 
      sharp[i+1] = s+pg; 
    } 
    z.vibrate(sharp, 0); 
} 
} else { 
     z.cancel(); 
} 

Если кто-нибудь в состоянии мне точку в направлении какой-то код, который может это сделать, или как я могу заставить его работать, я был бы очень признателен.

+0

Пожалуйста, разместите свой след ошибки. – Sam

ответ

0

Единственное, что у меня есть, это то, что вы получаете ошибку ArrayIndexOutOfBounds.

Если это так, вам необходимо определить длину массивов long, прежде чем пытаться их заполнить.

long[] OutOfBounds = new long[]; 
OutOfBounds[0] = 100; 
// this is an error, it's trying to access something that does not exist. 

long[] legit = new long[3]; 
legit[0] = 0; 
legit[1] = 500; 
legit[2] = 1000; 
// legit[3] = 0; Again, this will give you an error. 

vibrate() - умная функция. Ни один из этих примеров не выдает ошибку:

v.vibrate(legit, 0); 
// vibrate() combines both legit[0] + legit[2] for the 'off' time 

long tooLegit = new long[100]; 
tooLegit[0] = 1000; 
tooLegit[1] = 500; 
tooLegit[10] = 100; 
tooLegit[11] = 2000; 
v.vibrate(tooLegit, 0); 
// vibrate() skips over the values you didn't define, ie long[2] = 0, long[3] = 0, etc 

Надеюсь, что это поможет.

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

  • Нет связанных вопросов^_^