2010-10-27 68 views
2

我想调用函数startActivity有两种方式:调用其他类文件中的函数 “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的”,因为analise日志工作

这是我的日志从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 } from ProcessRecord {43 dbf4b8 363:com.androidbook/10025}(PID = 363, UID = 10025)需要 android.permission.CALL_PHONE

10-27 16:10:56.722: WARN/dalvikvm(363):主题ID = 3:螺纹 与未捕获的异常 离开(组= 0x4001b188)

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

10-27 16:10:56.752: ERROR/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预先

谢谢, 迈克尔

+0

您可以发布您在LogCat中获得的确切错误吗? – cottonBallPaws 2010-10-27 15:53:32

回答

5

问题是你的行为。

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

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

从Android SDK文档:

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

编辑
看你最后的编辑,与logcat的后。我可以100%说你的问题是使用ACTION_CALL。长话短说,你没有权限使用ACTION_CALL,你必须使用ACTION_DIAL。

+2

当我将ACTION_CALL替换为ACTION_DIAL应用程序的工作。谢谢;) – Altertwin 2010-10-27 16:32:43

相关问题