2

Я хочу, чтобы прочитать SMS, когда он вновь приходит на мой мобильный телефон, я реализовал IncomingSms.java, чтобы проверить новый SMS, какAndroid: Использование вещания приемника

IncomingSms.java

public class IncomingSms extends BroadcastReceiver { 

// Get the object of SmsManager 
final SmsManager sms = SmsManager.getDefault(); 

public void onReceive(Context context, Intent intent) { 

    // Retrieves a map of extended data from the intent. 
    final Bundle bundle = intent.getExtras(); 

    try { 

     if (bundle != null) { 

      final Object[] pdusObj = (Object[]) bundle.get("pdus"); 

      for (int i = 0; i < pdusObj.length; i++) { 

       SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
       String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 

       String senderNum = phoneNumber; 
       String message = currentMessage.getDisplayMessageBody(); 

       Log.i("SmsReceiver", "senderNum: " + senderNum + "; message: " + message); 


       // Show Alert 
       int duration = Toast.LENGTH_LONG; 
       Toast toast = Toast.makeText(context, 
         "senderNum: "+ senderNum + ", message: " + message, duration); 
       toast.show(); 

      } // end for loop 
     } // bundle is null 

    } catch (Exception e) { 
     Log.e("SmsReceiver", "Exception smsReceiver" +e); 

    } 
} 

}

но теперь проблема я хочу назвать onReceive в моем другом фрагменте, но я не знаю, что передать в качестве второго аргумента в onReceive методе, требующий Intent ...

HELP

+0

В соответствии с требованием Intent, вы можете передать действие и также передайте значение пакета в Intent, которое вы можете использовать в onReceive – TejaDroid

+0

Вы никогда не должны называть 'onReceive' напрямую, но [отправить трансляцию] (http://stackoverflow.com/questions/21237197/how-to-use-send-broadcast-method-in-fragment-class) из вашего контекста (в данном случае, активность Фрагмента). Тем не менее, я не вижу, чего вы хотите достичь, - можете ли вы рассказать нам немного больше? – Glorfindel

+0

Я хочу обнаружить sms, как только это произойдет, но я не могу найти, что передать в качестве второго аргумента в методе OnReceive. вы можете помочь с примером – Ravi

ответ

0
  1. вы должны добавить общедоступный интерфейс в своем классе и создать статический экземпляр из него.
  2. в вашем интерфейсе фрагмента
  3. такой ..!

    public class IncomingSms extends BroadcastReceiver { 
    
    public interface IReceiveSMS{ 
        public void onReceiveData(/*inser your params here*/); 
    } 
    public static IReceiveSMS receiverSMS; 
    // Get the object of SmsManager 
    final SmsManager sms = SmsManager.getDefault(); 
    
    public void onReceive(Context context, Intent intent) { 
    
    // Retrieves a map of extended data from the intent. 
    final Bundle bundle = intent.getExtras(); 
    
    try { 
    
        if (bundle != null) { 
    
        final Object[] pdusObj = (Object[]) bundle.get("pdus"); 
    
        for (int i = 0; i < pdusObj.length; i++) { 
    
         SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
         String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 
    
         String senderNum = phoneNumber; 
         String message = currentMessage.getDisplayMessageBody(); 
    
         Log.i("SmsReceiver", "senderNum: " + senderNum + "; message: " + message); 
    
    
         // Show Alert 
         int duration = Toast.LENGTH_LONG; 
         Toast toast = Toast.makeText(context, 
           "senderNum: "+ senderNum + ", message: " + message, duration); 
         toast.show(); 
    
        } // end for loop 
        if(receiverSMS != null) 
         receiverSMS.onReceiveData(/*inser your params here*/); 
    } // bundle is null 
    
        } catch (Exception e) { 
        Log.e("SmsReceiver", "Exception smsReceiver" +e); 
    
        } 
        } 
    
  4. в вашем фрагменте

    IncomingSms.receiverSMS = new IReceiveSMS{ 
        @Override 
        public void onReceiveData(/*inser your params here*/) 
        { 
        //use params 
        } 
    } 
    
  5. пользуются
+0

Пожалуйста, помогите мне, указав, как мне следует вызвать onReceive() в моем фрагменте – Ravi

+0

, вы не можете вызвать onReceive() в своем фрагменте .android call автоматически onReceive(). вы просто можете его использовать – bootiyar

1

если вы хотите позвонить OnReceive ...

private void sendBroadcastToAPI() { 
    Intent intent = new Intent(); 
    String action = "your reciver action"; 
    Bundle bundle = new Bundle();//save data into bundle 
    intent.putExtras(bundle); 
    intent.setAction(action); 
    sendBroadcast(intent); 
} 
Смежные вопросы