2017-02-28 23 views
1

我想單擊菜單中的按鈕來撥打電話。 該動作有效,但不正確,因爲當我點擊按鈕開始一個空白頁面時,當我點擊返回按鈕時,通話開始!我沒有發現錯誤,請問您能幫助我嗎?ACTION_CALL無法正常工作

這裏是我的代碼:

/*Fare una telefonata*/ 
private void onCall() { 
    int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE); 

    if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(
       this, 
       new String[]{Manifest.permission.CALL_PHONE}, 
       123); 
    } else { 
     startActivity(new Intent(Intent.ACTION_CALL).setData(Uri.parse("tel:3314617839"))); 
    } 
} 
/*Dopo il risulato della richiesta di permesso*/ 
@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    switch (requestCode) { 

     case 123: 
      if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) { 
       onCall(); 
      } else { 
       Log.d("TAG", "Call Permission Not Granted"); 
      } 
      break; 

     default: 
      break; 
    } 
} 

按鈕是:

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    int id=item.getItemId(); 
    switch(id) 
    { 
     case R.id.ContConc: 
      onCall(); 

我對清單中的權限,實際上呼叫開始,但我覺得有一些多餘的,也許,我真的不知道!

回答

1

我強烈建議你使用ACTION_DIAL,它會爲你節省的所有請求允許的事情:

public static void dialNumber(Context context, String number) { 
     Intent intent = new Intent(Intent.ACTION_DIAL); 
     intent.setData(Uri.parse("tel:" + number)); 
     context.startActivity(intent); 
    } 

,但如果你真的想打電話,你需要做更多的工作,除非你 targetSdkVersion低於23.對於23歲及以上者,您需要實施Permission handler。然後你可以使用的方法類似這樣的:

public static void callNumber(Context context, String number){ 
      Intent callIntent = new Intent(Intent.ACTION_CALL); 
      callIntent.setData(Uri.parse("tel:"+ number)); 

      if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
       return; 
      } 
      context.startActivity(callIntent); 
     } 
+0

With ACTION_DIAL根本不起作用:( –

+0

@MariaNovellaMadia我編輯了我的答案,如果你想檢查 – JCDecary

+0

真的很感謝你,我會盡快檢查! –

1

我青梅前段時間做同樣的事情,並沒有爲我工作,要麼讓我落得這樣做的:

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
int id=item.getItemId(); 
switch(id) 
{ 
    case R.id.ContConc: 
     public void onClick(View v) { 
      String number = "+31612345678"; 
      Uri call = Uri.parse("tel:" + number); 
      Intent call = new Intent(Intent.ACTION_DIAL, call); 
      startActivity(call); 

它與您想要的不完全相同,因爲這會將您帶到號碼變量中的電話號碼轉到呼叫者應用程序。

你也不必問得到許可

希望這有助於!

+0

不起作用:( –