2015-05-21 52 views
0

我試圖打一個電話,當一個特定的通知到達, 我使用通知服務監聽器來讀取傳入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」方法後使用的數字,但當我開始意圖nathing發生..

我的問題是什麼? :/

回答

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);

如何
NotificationListenerService定義屬性activity並定義接受的活動構造:

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