【问题标题】:Calling the function "startActivity" in other class and file doesn't work在其他类和文件中调用函数“startActivity”不起作用
【发布时间】:2010-10-27 15:49:24
【问题描述】:

我想通过两种方式调用函数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);
   }
}

第二种方法不起作用 - 当我点击菜单中的位置时,我的应用程序出错。我知道 IntentsUtils 中的函数“调用”可以工作,因为分析登录“LogCat”

这是我的 LogCat 日志: android.permission.CALL_PHONE

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

WARN/ActivityManager(52):权限 拒绝:开始 Intent { 行动=android.intent.action.CALL 数据=电话:5555555555 标志=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: 警告/dalvikvm(363):threadid=3:线程 以未捕获的异常退出 (组=0x4001b188)

10-27 16:10:56.722: 错误/AndroidRuntime(363):未捕获 处理程序:线程主退出由于 未捕获的异常

10-27 16:10:56.752: 错误/AndroidRuntime(363): java.lang.SecurityException: 权限拒绝:启动 Intent { 行动=android.intent.action.CALL 数据=电话:5555555555 标志=0x10000000 cmp=com.android.phone/.OutgoingCallBroadcaster } 来自 ProcessRecord{43dbf4b8 363:com.androidbook/10025} (pid=363, uid=10025) 需要 android.permission.CALL_PHONEandroid.permission.CALL_PHONE

提前致谢, 迈克尔

【问题讨论】:

  • 您能否发布您在 LogCat 中遇到的确切错误?

标签: android android-activity


【解决方案1】:

问题在于你的行为。

ACTION_CALL 仅限于特定应用程序(我认为仅限系统应用程序)。您收到 logcat 消息的原因是您在尝试开始活动之前记录了它。由于系统不允许您的应用直接拨打电话号码,因此将发生权限错误。您可以拨打它,但用户必须按呼叫。

这是一个安全问题,如果他们让任何应用程序开始拨打电话号码。

来自 Android SDK 文档:

注意:哪些应用可以发起呼叫会有限制;大多数应用程序应该使用ACTION_DIAL

编辑
在查看了您的最后一次编辑后,使用 logcat。我可以说 100% 您的问题在于使用 ACTION_CALL。

长话短说,你没有使用 ACTION_CALL 的权限,你必须使用 ACTION_DIAL。

【讨论】:

  • 当我将函数 ACTION_CALL 替换为 ACTION_DIAL 应用程序工作。谢谢;)
【解决方案2】:

尝试按照

中给出的方式设置 FLAG_ACTIVITY_NEW_TASK

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

你可能需要这样设置:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

这个我没试过。不过值得一试

【讨论】:

  • 我添加了这个,但没有帮助:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多