Android: как сделать приложение для набора номера по умолчанию? - PullRequest
0 голосов
/ 15 января 2019

Сегодня я получил отклонение от Google для моего приложения Facetocall

  • Похоже, что ваше приложение не предлагает пользователю использовать обработчик по умолчанию, прежде чем запрашивать соответствующие разрешения, как того требует политика. Пожалуйста, внесите необходимые изменения, чтобы соответствовать политике требования и повторно подать заявку через форму декларации.

  • Возможность обработки по умолчанию была указана в форме объявления, но ваше приложение не имеет возможности обработчика по умолчанию.

Моя цель - сделать приложение для набора номера по умолчанию.

Вот мой манифест

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.gazman.beep"
    android:installLocation="preferExternal">

    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.READ_CALL_LOG" />
    <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    ... and other permissions

    <application
        android:name=".application.BeepApp"
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        tools:ignore="GoogleAppIndexingWarning">

        <activity
            android:name=".system_intents.IntentsActivity"
            android:launchMode="singleTask"
            android:noHistory="true"
            android:theme="@style/Theme.Transparent">
            <intent-filter>
                <action android:name="android.intent.action.DIAL" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.DIAL" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="tel" />
            </intent-filter>
        </activity>

        <activity
            android:name=".call.CallActivity"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:showForAllUsers="true" />

        <service
            android:name="com.gazman.beep.call.MyInCallService"
            android:permission="android.permission.BIND_INCALL_SERVICE">
            <meta-data
                android:name="android.telecom.IN_CALL_SERVICE_UI"
                android:value="true" />
            <intent-filter>
                <action android:name="android.telecom.InCallService" />
            </intent-filter>
        </service>

        ... And other declarations

    </application>

</manifest>

И вот что я делаю, когда запускается мое приложение:

private void checkDefaultHandler() {
    if (isAlreadyDefaultDialer()) {
        return;
    }
    Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER);
    intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, getPackageName());
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER);
    }
    else{
        throw new RuntimeException("Default phone functionality not found");
    }
}

private boolean isAlreadyDefaultDialer() {
    TelecomManager telecomManager = (TelecomManager) getSystemService(TELECOM_SERVICE);
    return getPackageName().equals(telecomManager.getDefaultDialerPackage());
}

Что мне здесь не хватает?

Я попытался отправить форму еще раз, и на этот раз я добавляю видео , которое показывает мое приложение на эмуляторе (я вижу такое же поведение на всех реальных устройствах), вот ответ, который я получил :

  • Ваше приложение не предлагает пользователю быть обработчиком по умолчанию, прежде чем запрашивать соответствующие разрешения, как того требует политика. Пожалуйста, внесите необходимые изменения, чтобы соответствовать политике требования и повторно подать заявку через форму декларации.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Вам не нужно паниковать. Такого рода разговоры произошли и со мной относительно контента AdMob в моем приложении. Я объявил все отлично, но все же они говорили, что рейтинг контента не очень хороший из-за типа рекламы, которую показывало мое приложение. Когда обменялись почтой, мне прислали скриншот с доказательством неправильной рекламы, так что, наконец, я снова проверил весь код и обнаружил свою ошибку.

Дело в том, что Google хорош в том, что они делают, и если они так сказали, то в вашем приложении чего-то не хватает.

Если честно, ваше приложение нигде не просило пользователя разрешить его установку по умолчанию, вместо этого оно установило себя по умолчанию в фоновом режиме. Вы должны запрашивать каждое разрешение, требуемое вашим приложением, которое критично и может использоваться любым приложением, вирусом или шпионским ПО для вмешательства в конфиденциальность пользователя .

Вы можете сделать это с помощью функции, как в следующем примере, которая запрашивает разрешение камеры у пользователя:

private void requestCameraPermission() {
        Log.i(TAG, "CAMERA permission has NOT been granted. Requesting permission.");

        // BEGIN_INCLUDE(camera_permission_request)
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.CAMERA)) {
            // Provide an additional rationale to the user if the permission was not granted
            // and the user would benefit from additional context for the use of the permission.
            // For example if the user has previously denied the permission.
            Log.i(TAG,
                    "Displaying camera permission rationale to provide additional context.");
            Snackbar.make(mLayout, R.string.permission_camera_rationale,
                    Snackbar.LENGTH_INDEFINITE)
                    .setAction(R.string.ok, new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            ActivityCompat.requestPermissions(MainActivity.this,
                                    new String[]{Manifest.permission.CAMERA},
                                    REQUEST_CAMERA);
                        }
                    })
                    .show();
        } else {

            // Camera permission has not been granted yet. Request it directly.
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},
                    REQUEST_CAMERA);
        }
        // END_INCLUDE(camera_permission_request)
    }

Полный репозиторий можно посмотреть в Google Samples

И не волнуйся. Если вы исправите эту проблему, они примут ваше заявление, как и мое.

0 голосов
/ 18 января 2019

Мне кажется, что если Google уже заблокировал ваше приложение, ревизии не будет. Вам ответят боты. Как это произошло не раз (по другим причинам).

" Не будь злым " они сказали.

...