2017-01-10 5 views
-3

Я пытаюсь создать код, который показывает уведомление при получении SMS. Моя проблема заключается в том, как я могу реализовать широковещательный приемник для своей основной деятельности, потому что в моем основном действии у меня также есть другие функции. Если я попытаюсь создать еще один класс, который расширяет широковещательный приемник, то как я могу назвать это из основного класса? Автоматически ли он запускает эту функцию сразу после получения сообщения или ее необходимо вызвать из основного действия?Получить SMS и показать уведомление

ответ

0

Если бы я был вами, я бы поставил намеренный вызов в методе onReceive вещательного приемника, на который вы передаете значение пакета, а затем на вид mainactivity, чтобы увидеть, существует ли этот пакет, и если да, сделайте любое действие, которое вы хотите do (например, показать диалог, тост и т. д.).

0

Передатчик широковещательной передачи будет вызываться андроидом, если вы его правильно зарегистрировали (либо с помощью кода, либо в вашем манифесте xml). Вам будет предоставлен доступ к context в обратных вызовах получателя. В этом контексте вы можете либо создать уведомление (на основании названия этого вопроса), либо получить доступ к applicationContext, который будет вашим подклассом ApplicationIF, который вы объявили в своем манифесте xml.

1

Вы видели this вопрос? в любом случае попробовать это:

public class SmsListener extends BroadcastReceiver{ 

    private SharedPreferences preferences; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
      Bundle bundle = intent.getExtras();   //---get the SMS message passed in--- 
      SmsMessage[] msgs = null; 
      String msg_from; 
      if (bundle != null){ 
       //---retrieve the SMS message received--- 
       try{ 
        Object[] pdus = (Object[]) bundle.get("pdus"); 
        msgs = new SmsMessage[pdus.length]; 
        for(int i=0; i<msgs.length; i++){ 
         msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
         msg_from = msgs[i].getOriginatingAddress(); 
         String msgBody = msgs[i].getMessageBody(); 
        } 
       }catch(Exception e){ 
//       Log.d("Exception caught",e.getMessage()); 
       } 
      } 
     } 
    } 
} 

Примечание: В вашем файле манифеста добавьте BroadcastReceiver-

<receiver android:name=".listener.SmsListener"> 
    <intent-filter> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

Добавить это разрешение:

<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

также вы строите уведомление с помощью Notification.Builder

0

@another, попробуйте реализовать в путь снижения:

public class MyActivity extends Activity { 
    private BroadcastReceiver receiver = new 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); 

     } 
    } 
    }); 

    public void onResume() { 
     super.onResume(); 

     IntentFilter filter = new IntentFilter(); 
     filter.addAction(BROADCAST_ACTION); 

     this.registerReceiver(this.receiver, filter); 
    } 

    public void onPause() { 
     super.onPause(); 

     this.unregisterReceiver(this.receiver); 
    } 
} 
Смежные вопросы