Использование намерения для вызова действия из другой программы приводит к отказу в разрешении - PullRequest
2 голосов
/ 16 октября 2010

В моем очень простом приложении (на основе приложения Hello World по умолчанию, но с добавленной кнопкой) я пытаюсь открыть одно из предустановленных действий моего телефона (SE X10 Mini), например:

Intent calendarIntent = new Intent();
calendarIntent.setClassName("com.sonyericsson.calendar","com.sonyericsson.calendar.dayview.DayActivity");
startActivity(calendarIntent);

Однако, это не работает, я получаю следующую ошибку в журнале:

E/AndroidRuntime( 2215): java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.sonyericsson.calendar/.dayview.DayActivity } from ProcessRecord{302cf238 2215:com.klibb.quickappointment/10079} (pid=2215, uid=10079) requires null
E/AndroidRuntime( 2215):    at android.os.Parcel.readException(Parcel.java:1246)
E/AndroidRuntime( 2215):    at android.os.Parcel.readException(Parcel.java:1234)
E/AndroidRuntime( 2215):    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1157)
E/AndroidRuntime( 2215):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1449)
E/AndroidRuntime( 2215):    at android.app.Activity.startActivityForResult(Activity.java:2661)
E/AndroidRuntime( 2215):    at android.app.Activity.startActivity(Activity.java:2705)
E/AndroidRuntime( 2215):    at com.klibb.quickappointment.QuickAppointmentActivity$1.onClick(QuickAppointmentActivity.java:25)

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

Любые идеи приветствуются!

PS. Я пытаюсь создать небольшую программу, которая непосредственно запускает на моем телефоне действие «Новое приложение», чтобы избежать двух дополнительных действий (запустить календарь по умолчанию, щелкнуть день, щелкнуть час).

Ответы [ 2 ]

1 голос
/ 26 ноября 2010

Матиас,

То, что вы пытаетесь сделать, на самом деле очень просто.Однако получить необходимую информацию может быть сложно.Вам нужно найти три фрагмента информации (ни один из которых не требует перезаписи предустановленного приложения)

1) Определить, может ли действие быть запущено внешними компонентами.Это делается с помощью диспетчера пакетов, чтобы предоставить вам список всех установленных пакетов и связанных с ними данных.Вы также можете получить бесплатный анализатор пакетов в Android Market.2) Получите разрешение, необходимое для запуска приложения, и добавьте его в свой манифест.Разрешения регистрируются в ОС Android, но, насколько я знаю, получение необходимых разрешений для внешнего приложения не выполняется с помощью диспетчера пакетов.3) Получите дополнительные сведения (данные), необходимые для начала действия, если оно является «вспомогательным действием».

Лучшая ставка для № 2 и 3 - связаться с Sony Ericsson или выполнить поиск на их веб-сайте.Многие производители телефонов Android предоставляют открытую информацию о своих продуктах.Если вам повезет, это может быть просто файл, который вам предоставляют через AIDL.

FuzzicalLogic

0 голосов
/ 16 октября 2010

Вы должны иметь разрешение android.permission.READ_CALENDAR, указанное в манифесте. Могут потребоваться и другие.

...