1

I need to check if my dialer app is default dialer app or not. Currently I'm using this code

private boolean isDefault() {
        Intent i=new Intent(Intent.ACTION_DIAL);
        i.addCategory(Intent.CATEGORY_DEFAULT);
        ResolveInfo info=getPackageManager().resolveActivity(i,0);
        CharSequence name=getPackageManager().getApplicationLabel(info.activityInfo.applicationInfo);
        Log.d(TAG, "isDefault: "+name);
        return name==getString(R.string.app_name);
    }

But name is always "Android System" Your help will be greatly appreciated. Thanks

4 Answers4

6

I was able to solve my problem by using TelecomManager here is my code

 private boolean isDefault() {
       TelecomManager manger= (TelecomManager) getSystemService(TELECOM_SERVICE);
       String name=manger.getDefaultDialerPackage();
        Log.d(TAG, "isDefault: "+name);
        return name.equals(getPackageName());
    }
1

Here's a safe way to do it, which will work for all Android versions:

    fun isDefaultDialer(context: Context, packageNameToCheck: String = context.packageName): Boolean {
        val dialingIntent = Intent(Intent.ACTION_DIAL).addCategory(Intent.CATEGORY_DEFAULT)
        val resolveInfoList = packageManager.queryIntentActivities(dialingIntent, 0)
        if (resolveInfoList.size != 1)
            return false
        return packageNameToCheck == resolveInfoList[0].activityInfo.packageName
    }

Sample usage:

        Log.d("AppLog", "is current app the default dialer?${isDefaultDialer(this)}")
        Log.d("AppLog", "is Google Dialer the the default dialer?${isDefaultDialer(this,"com.google.android.dialer")}")
android developer
  • 114,585
  • 152
  • 739
  • 1,270
0

Telecom Manager's default dialer package is available from API level 23.

private fun getDefaultDialerApp() : String?{
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            val manager = applicationContext.getSystemService(Context.TELECOM_SERVICE) as TelecomManager
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                return manager.defaultDialerPackage;
            }
        }
        return null //Change it based on your requirement.
    }
Rajeev Shetty
  • 1,534
  • 1
  • 17
  • 27
0

You can get default Dialer for all version like this

 private boolean isDefault() {
    boolean isDefault = false;
    TelecomManager manger= null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        manger = (TelecomManager) getSystemService(TELECOM_SERVICE);
    }
    String name= null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        name = manger.getDefaultDialerPackage();
        isDefault = name.equals(getPackageName());
    }else{
        Intent dialingIntent =new  Intent(Intent.ACTION_DIAL).addCategory(Intent.CATEGORY_DEFAULT);
        List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(dialingIntent, 0);
        if (resolveInfoList.size() != 1)
            isDefault =  false;
        String defualtPackgeName = resolveInfoList.get(0).activityInfo.packageName;
        isDefault = getPackageName().equals(defualtPackgeName);

    }

    return isDefault;
}
Binesh Kumar
  • 2,763
  • 1
  • 16
  • 23