2015-05-21 3 views
0

я пытаюсь сделать телефонный звонок, когда конкретное уведомление прибудет, я использовать Notification Service Listener читать входящие notificaion,сделать телефонный звонок, когда конкретное уведомление прибудет

public void onNotificationPosted(StatusBarNotification sbn) { 
    // if(if this is my notificaion..){ 
    String name = sbn.getNotification().extras.getCharSequence(Notification.EXTRA_TITLE)); 
    List<String> numbers = getPhoneNumbers(name); 
    Log.d(TAG, "i have all this numbers - " + numbers.toString()); 

    Intent intent = new Intent(Intent.ACTION_CALL); 
    intent.setData(Uri.parse("tel:" + numbers.get(1))); 
    startActivity(intent); 
} 

в «getPhoneNumbers» метод это один

public List<String> getPhoneNumbers(String name) { 
    List<String> numbers = new ArrayList<String>(); 

    ContentResolver cr = getContentResolver(); 
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
      "DISPLAY_NAME = '" + name + "'", null, null); 
    if (cursor.moveToFirst()) { 
     String contactId = 
       cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
     // Get all phone numbers. 
        Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
       ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); 
     while (phones.moveToNext()) { 
      String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      numbers.add(number); 

     } 
     phones.close(); 
    } 

    cursor.close(); 
    return numbers; 

} 

все отлично работает (я использовал точки останова, чтобы Cheak всех ...) : «если это мое уведомление» отработано, я получаю название от SBN статистов, что «номера» arraylist включает все контакты числа после метода «getPhoneNumbers», но когда я начинаю наступление намерения.

В чем моя проблема? :/

ответ

0

нашел решение для запуска вызова от службы:

Intent intent = new Intent(Intent.ACTION_CALL); 
      intent.setData(Uri.parse("tel:" + number)); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      intent.addFlags(Intent.FLAG_FROM_BACKGROUND); 
      startActivity(intent); 

решение от: Android: Make phone call from service

1

Поясним:

Проблема
Ваш метод onNotificationPosted не запускается телефонный звонок при вызове startActivity(intent);.

Почему
NotificationListenerService не является деятельностью.

Решение
Сделайте MainActivity Вызовите startActivity(intent);.

Как
Определение атрибута activity в NotificationListenerService и определить конструктор, который принимает активность:

NotificationListenerService.java

// define attribute activity: 
MainActivity activity; 

public NotificationListenerService(MainActivity activity) { 
    this.activity = activity; 
} 

MainActivity.java

// create a NotificationListenerService sending itself as reference 
NotificationListenerService nls = new NotificationListenerService(this); 

Тогда внутри onNotificationPosted вы увидите атрибут, так что вы можете:

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ numbers.get(1))); 
activity.startActivity(intent); 
+0

я хочу numbers.get (1) .. (для этого контакта больше 5 чисел, поэтому я думаю, что это не проблема ...), и эта суфляция не работает:/ – Didi78

+0

@ Didi78 проверить мое редактирование, я думаю, проблема в том, что вы не видите 'MainActivity' внутри' onNotificationPosted' .... –

+0

вы говорите, что мне нужно определить myActivity = this; в onNotificationPosted? Я думаю, что это невозможно, потому что NotificationListenerService не является активностью. или, может быть, я вас плохо понял? Мне нужно определить его в моей MainActivity? (У меня есть..) – Didi78

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