Blackberry - позвонить из родной адресной книги - PullRequest
1 голос
/ 21 сентября 2009

как сделать звонок из пункта меню, добавленного в родную книгу BB (опция «Позвонить с ABC»)?

1 Ответ

8 голосов
/ 21 сентября 2009

Инициировать вызов программно

Для RIM OS 4.7 и ниже используйте Invoke :

PhoneArguments phoneArgs = new PhoneArguments(PhoneArguments.ARG_CALL,
    "555-5555");
Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, phoneArgs);

Для заявленной RIM OS 5.0 мы можем использовать Phone.initiateCall метод:

Phone.initiateCall(Phone.getLineIds()[0], "519-555-0100");

См. Выполнение вызова из приложения устройства BlackBerry (многострочная среда)

Добавление пользовательского пункта меню в приложение BlackBerry

Чтобы добавить пункт «Позвонить через ABC» в меню адресной книги, нужно сделать следующее:

  • реализовать пользовательский элемент как расширение ApplicationMenuItem
  • добавить экземпляр пользовательского элемента в меню, используя ApplicationMenuItemRepository
  • перед развертыванием на реальном устройстве не забудьте подписать ваш код (может занять до 2 недель)

Теперь реализуем пользовательский пункт меню:

class AdressBookMenuItem extends ApplicationMenuItem {
    Contact mContact;
    public AdressBookMenuItem(int order) {
        super(order);
    }
    public Object run(Object context) {
        if (context instanceof Contact) {
            mContact = (Contact) context;
            if (0 < mContact.countValues(Contact.TEL)) {
                String phone = mContact.getString(Contact.TEL, 0);
                PhoneArguments args = new PhoneArguments(
                        PhoneArguments.ARG_CALL, phone);
                Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, args);
            } else {
                Dialog.alert("This contact has no phone number");
            }
        }
        return null;
    }
    public String toString() {
        return "Call via ABC";
    }
}

Теперь добавьте его в адресную книгу:

AdressBookMenuItem menuItem = new AdressBookMenuItem(0);
ApplicationMenuItemRepository repository = 
    ApplicationMenuItemRepository.getInstance();
long id = ApplicationMenuItemRepository.MENUITEM_ADDRESSBOOK_LIST;
repository.addMenuItem(id, menuItem);

Собираем все вместе

  • Запустить приложение
  • Нажмите кнопку вызова
  • Выберите контакт
  • Открыть меню

Вы должны увидеть

меню адресной книги http://img9.imageshack.us/img9/8175/callviaabc.png

Проверено на симуляторе Bold 9000
Полный код:

import javax.microedition.pim.Contact;
import net.rim.blackberry.api.invoke.Invoke;
import net.rim.blackberry.api.invoke.PhoneArguments;
import net.rim.blackberry.api.menuitem.ApplicationMenuItem;
import net.rim.blackberry.api.menuitem.ApplicationMenuItemRepository;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.MainScreen;

public class CallIntegrate extends UiApplication {

    public CallIntegrate() {
        pushScreen(new Scr());
    }

    public static void main(String[] args) {
        CallIntegrate app = new CallIntegrate();
        app.enterEventDispatcher();
    }
}

class AdressBookMenuItem extends ApplicationMenuItem {
    Contact mContact;

    public AdressBookMenuItem(int order) {
        super(order);
    }

    public AdressBookMenuItem(Object context, int order) {
        super(context, order);
    }

    public Object run(Object context) {
        if (context instanceof Contact) {
            mContact = (Contact) context;
            if (0 < mContact.countValues(Contact.TEL)) {
                String phone = mContact.getString(Contact.TEL, 0);
                PhoneArguments args = new PhoneArguments(
                        PhoneArguments.ARG_CALL, phone);
                Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, args);
            } else {
                Dialog.alert("This contact has no phone number");
            }
        }
        return null;
    }

    public Contact getContact() {
        return mContact;
    }

    public String toString() {
        return "Call via ABC";
    }
}

class Scr extends MainScreen {
    public Scr() {
        super(DEFAULT_MENU|DEFAULT_CLOSE);
        String label = "Now please go to blackberry adressbook, "
                + "select contact and open menu";
        add(new LabelField(label));

        AdressBookMenuItem menuItem = new AdressBookMenuItem(0);
        ApplicationMenuItemRepository repository = 
            ApplicationMenuItemRepository.getInstance();
        long id = ApplicationMenuItemRepository.MENUITEM_ADDRESSBOOK_LIST;
        repository.addMenuItem(id, menuItem);
    }
}
...