0

インテントでURIを使用する機能がありますtel://。これにより、電話アプリが起動し、内蔵の電話を使用する選択肢も与えられるため、セルラー信号のないデバイスの場合、確認する条件を設定します

if(pm.hasSystemFeature("android.hardware.telephony"))どこpmで PackageManager オブジェクトです。

マニフェストのアクセス許可に基づいてアプリをインストールできるにもかかわらず、この条件が存在しない場合、一部のデバイスはクラッシュします。

tel://しかし、意図はあるが実際にはテレフォニー ハードウェアを使用しないVOIP アプリもあります。

ユーザーのデバイスが持っているハードウェア機能を確認する代わりに、tel URI を使用できるものがあるかどうかを確認する方法はありますか?

4

1 に答える 1

1

次のように、システムにインテントを受け取ることができるアクティビティがあるかどうかを確認できます。

private void tryOpenDialer(String phoneNumber) {
    if (TextUtils.isEmpty(phoneNumber)) {
        // invalid input - return or throw IllegalArgumentException
        return;
    }
    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phoneNumber));
    PackageManager pkgManager = getPackageManager();
    List<ResolveInfo> activities = pkgManager.queryIntentActivities(intent, 0);
    if (activities.size() > 0) {
        context.startActivity(intent)
    } else {
        // if you want, pop up a toast or dialog telling the user there is
        // nothing on the device to handle this action
    }
}
于 2013-07-29T15:27:52.407 に答える