2015-01-15 2 views
0

Я хочу, чтобы мое приложение вибрировало устройство, используя собственный шаблон вибрации моего приложения. Я могу сделать это из MainActivity или любого Activity, но я не знаю, почему он не работает из класса Java (SmsReceiver.java).Почему устройство вибрирует из Activity, но не из класса (файла)?

Я думал, что если я использую ...context.getApplicationContext.getSystemService(Context.VIBRATOR_SERVICE);, он получит контекст MainActivity и, таким образом, будет вроде как в MainActivity, и он будет вибрировать. Но нет. Он не вибрирует из класса Receiver.

Как я могу вибрировать телефон из класса SmsReceiver.java?

SmsReceiver.java:

package com.app.name.app; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Vibrator; 
import android.telephony.SmsMessage; 
import android.util.Log; 
import android.widget.Toast; 

public class SmsReceiver extends BroadcastReceiver { 
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(SMS_RECEIVED)) { 
      Bundle bundle = intent.getExtras(); 

      if (bundle != null) { 
       // get sms objects 
       Object[] pdus = (Object[]) bundle.get("pdus"); 
       if (pdus.length == 0) { 
        return; 
       } 
       // large message might be broken into many 
       SmsMessage[] messages = new SmsMessage[pdus.length]; 
       StringBuilder sb = new StringBuilder(); 

       for (int i = 0; i < pdus.length; i++) { 
        messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
        sb.append(messages[i].getMessageBody()); 
       } 

       String sender = messages[0].getOriginatingAddress(); 
       Log.d("SNDR", sender); 
       String message = sb.toString(); 

       // prevent any other broadcast receivers from receiving broadcast 
       abortBroadcast(); 
       if(!message.isEmpty()) 
       { 
        if(message == "!") 
        { 
         Vibrator v = (Vibrator)context.getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE); 
         v.cancel(); 

         long[] longs = { 0, 75, 15, 100, 15, 100, 15, 75, 15 }; 
         v.vibrate(longs, -1); 
        } 
       } 

       Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 

      } 
     } 
    } 
} 

MainActivity.java, onButtonClick:

switch(id) 
{ 
    case R.id.action_search: 
     Vibrator v = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE); 

     long[] longs = { 0, 75, 15, 100, 15, 100, 15, 75, 15 }; 
     v.vibrate(longs, -1); 
     break; 
    case R.id.action_settings: 
     break; 
} 

This связанный с этим вопрос не решает эту проблему.

+0

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

ответ

3

Я не верю, что существует ограничение на использование услуги Vibrator от BroadcastReceiver. Я думаю, ваша проблема связана с вашим сопоставлением String. Вы должны использовать String#equals() для проверки на равенство String, а не ==.

if(message.equals("!")) 
+2

спасибо. Я родом из C#. Наверное, старые привычки умирают. :-) –

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

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