2017-01-27 31 views
-5

從應用程序調用時,它不起作用。我已經在Android清單中添加了權限,但它仍然無法工作。請看我的代碼,並儘快幫助我。電話不是在我的android應用程序中發生?

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent callIntent = new Intent(Intent.ACTION_CALL); 
     callIntent.setData(Uri.parse("tel:999999999")); 

     if (ActivityCompat.checkSelfPermission(menu.this, 
       Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
      return; 
     } 

     startActivity(callIntent); 
    } 
}); 
+0

歡迎來到Stack Overflow!爲了給你一個很好的答案,如果你有一個[問],如果你還沒有看過,它可能會幫助我們。如果你可以提供[mcve],它可能也很有用。 – Mat

+0

參考http://stackoverflow.com/questions/1556987/how-to-make-a-phone-call-in-android-and-come-back-to-my-activity-when-the-call-i for不同的方法 – Redman

+0

檢查您的調用權限標籤是否在清單文件中的應用程序標籤之前 –

回答

0

此代碼應工作:

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Phone_number")); 
    startActivity(intent); 

權限在清單:

<uses-permission android:name="android.permission.CALL_PHONE" /> 

,但我強烈建議你使用ACTION_DIAL代替。它用輸入的號碼打開撥號器屏幕。這給用戶更大的靈活性。你也不需要擁有這個CALL_PHONE權限。

這裏有一個更新:

隨着CALL_PHONE許可

主類

public class MainActivity extends AppCompatActivity { 

private final int CALL_PHONE = 1; 
private Button dialBtn; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    dialBtn = (Button) findViewById(R.id.dial_button); 
    //In android 6 we need to ask for permissions: 
    if (ActivityCompat.checkSelfPermission(getApplicationContext(), 
      Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, CALL_PHONE); 
     } else { 
      Toast.makeText(getApplicationContext(), "We need permissions to dial.", Toast.LENGTH_LONG).show(); 
     } 
    } else { 
     setupView(); 
    } 
} 

private void setupView() { 
    dialBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent callIntent = new Intent(Intent.ACTION_CALL); 
      callIntent.setData(Uri.parse("tel:999999999")); 
      // We have to implement this part because ... yeah permissions in android..... 
      if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
       Toast.makeText(getApplicationContext(), "We need permissions to dial.", Toast.LENGTH_LONG).show(); 
       return; 
      } 
      startActivity(callIntent); 
     } 
    }); 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    switch (requestCode) { 
     case CALL_PHONE: 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       setupView(); 
      } else { 
       Toast.makeText(getApplicationContext(), "We need permissions to dial.", Toast.LENGTH_LONG).show(); 
      } 
      break; 
    } 
} 

我的清單:

<uses-permission android:name="android.permission.CALL_PHONE"/> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

沒有權限檢查,只有使用ACTION_DIAL

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button dialBtn = (Button) findViewById(R.id.dial_button); 
    dialBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent callIntent = new Intent(Intent.ACTION_DIAL); 
      callIntent.setData(Uri.parse("tel:999999999")); 
      startActivity(callIntent); 
     } 
    }); 
} 
} 

最後一個是容易得多。 Android權限檢查是一個痛苦的屁股。

我剛做了我自己的課。下次更容易提供錯誤堆棧跟蹤。但對於我在代碼中可以看到的是您使用menu.this我不知道,因爲您沒有提供足夠的信息,但我認爲這會導致錯誤。

我希望我幫助你。

+0

no sir,再次ita無法正常工作......當我正在撥打電話時...它帶着彈出式窗口來「不幸的是,應用程序已停止」 –

+0

PLZ幫我這個先生 –

+0

@VishalSharma請查看更新 –

相關問題