2010-10-27 51 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

相關問題