Вызов функции «startActivity» в другом классе и файл не работает - PullRequest
2 голосов
/ 27 октября 2010

Я хочу вызвать функцию startActivity двумя способами:

Первый (работает):

        public class HelloWorld extends Activity
{
        public boolean onOptionsItemSelected(MenuItem item) {
            if(item.getItemId() == 1){
                startActivity(new Intent(Intent.ACTION_DIAL,Uri.parse("tel:660718109")));
            }
            else {
                return super.onOptionsItemSelected(item);
            }
            return true;
}

Второй: в HelloActivity.java

    public class HelloWorld extends Activity {
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId() == 1){
            IntentsUtils.tryOneOfThese(this);
        }
        else {
            return super.onOptionsItemSelected(item);
        }
        return true;
}

в IntentsUtils.java

public class IntentsUtils
{
   public static void tryOneOfThese(Activity activity)
   {
       IntentsUtils.call(activity);
   }
   public static void call(Activity activity)
   {
      Intent intent = new Intent(Intent.ACTION_CALL);
      intent.setData(Uri.parse("tel:5555555555"));
      Log.v("MyLogs", "It's works!");
      activity.startActivity(intent);
   }
}

Второй способ не работает - у меня возникает ошибка в приложении, когда я нажимаю на позицию в меню.Я знаю, что функция "call" в IntentsUtils работает, потому что аналитические журналы в "LogCat"

Это мои журналы от LogCat: android.permission.CALL_PHONE

android.permission.CALL_PHONE> 10-27 16: 10: 56.702:

WARN / ActivityManager (52): Отказ в разрешении: начало намерения {act = android.intent.action.CALL dat = тел: 5555555555 flg = 0x10000000 cmp = com.android.phone / .OutgoingCallBroadcaster} из ProcessRecord {43dbf4b8 363: com.androidbook / 10025} (pid = 363, uid = 10025) требует android.permission.CALL_PHONE

10-27 16: 10: 56.722: WARN / dalvikvm(363): threadid = 3: поток, выходящий с неперехваченным исключением (группа = 0x4001b188)

10-27 16: 10: 56.722: ОШИБКА / AndroidRuntime (363): обработчик Uncaught: основной поток потока выходит из-за непогашенного исключения

10-27 16: 10: 56.752: ОШИБКА / AndroidRuntime (363): java.lang.SecurityException: Отказ в разрешении: начало намерения {act = android.intent.action.CALL dat = тел: 5555555555 flg =0x10000000 cmp = com.android.phone / .OutgoingCallBroadcaster} из ProcessRecord {43dbf4b8 363: com.androidbook / 10025} (pid = 363, uid = 10025) требуется android.permission.CALL_PHONEandroid.permission.CALL_PHONE

Заранее спасибо, Майкл

Ответы [ 2 ]

5 голосов
/ 27 октября 2010

Проблема в ваших действиях.

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

Это проблема безопасности, если приложение позволяет любому телефону начать звонить на номера.

Из Android SDK Документация:

Примечание: будут ограничения на то, какие приложения могут инициировать вызов;большинство приложений должны использовать ACTION_DIAL .

edit
после просмотра вашего последнего редактирования с помощью logcat.Я могу на 100% сказать, что ваша проблема связана с использованием ACTION_CALL.

Короче говоря, у вас нет разрешения на использование ACTION_CALL, вы должны использовать ACTION_DIAL.

1 голос
/ 27 октября 2010

Попробуйте установить FLAG_ACTIVITY_NEW_TASK, как указано в

http://developer.android.com/reference/android/content/Context.html#startActivity(android.content.Intent)

, возможно, вам придется установить так:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Я не пробовал это.Но стоит попробовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...