@zeuss56

Как отправить СМС в Android API без появления диалога?

Как отправить СМС на Android в обход запроса на отправку, что бы пользователь не видел диалог "Отправить СМС? Это может стоить вам денег"? Возможно ли это в принципе на устройстве без root с Android 5.0+?
  • Вопрос задан
  • 247 просмотров
Решения вопроса 1
AlexMarken
@AlexMarken
Вне зависимости от того, смените вы или нет приложение по умолчанию, диалог на доступ к системной функции всё равно будет.

Особенности разрешений можете почитать здесь.

Попробуй дать сделать приложение "Администратором устройства".
Давно делал систему контроля корпоративных устройств с возможностью удалённо через наш web-интерфейс сбрасывать пароли и полностью очищать данные. Решением была такая возможность.

В AndroidManifest:
<uses-feature
        android:name="android.software.device_admin"
        android:required="true"/>

    <application
       .........
        <receiver
            android:name=".Receiver.AdminReceiver"
            android:permission="android.permission.BIND_DEVICE_ADMIN">
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/device_admin"/>

            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
                <action android:name="android.app.action.ACTION_PASSWORD_CHANGED"/>
                <action android:name="android.app.action.ACTION_PASSWORD_FAILED"/>
                <action android:name="android.app.action.ACTION_PASSWORD_SUCCEEDED"/>
                <action android:name="android.permission.WRITE_SECURE_SETTINGS"/>
                <action android:name="android.permission.WRITE_SETTINGS" />
            </intent-filter>
        </receiver>


В .Receiver.AdminReceiver.java:
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class AdminReceiver extends DeviceAdminReceiver {
  @Override
  public void onEnabled(Context ctxt, Intent intent) {
    ComponentName cn=new ComponentName(ctxt, AdminReceiver.class);
    DevicePolicyManager mgr=
        (DevicePolicyManager)ctxt.getSystemService(Context.DEVICE_POLICY_SERVICE);

    mgr.setPasswordQuality(cn,
                           DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
    
    onPasswordChanged(ctxt, intent);
  }

  @Override
  public void onPasswordChanged(Context ctxt, Intent intent) {
    DevicePolicyManager mgr=
        (DevicePolicyManager)ctxt.getSystemService(Context.DEVICE_POLICY_SERVICE);
    String msgId = "";

    if (mgr.isActivePasswordSufficient()) {
      msgId="Ok";
    }
    else {
      msgId="Fail";
    }

    Toast.makeText(ctxt, msgId, Toast.LENGTH_LONG).show();
  }

  @Override
  public void onPasswordFailed(Context ctxt, Intent intent) {

  }

  @Override
  public void onPasswordSucceeded(Context ctxt, Intent intent) {

  }
}


Создайте "res/xml/device_admin.xml" и в него положите:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">

	<uses-policies>
		<limit-password />
		<watch-login />
		<reset-password />
		<force-lock />
		<wipe-data />
		<expire-password />
		<encrypted-storage />
	</uses-policies>

</device-admin>


В теге "intent-filter" указываются привилегии, полный список их можешь найти в Гугл.
После установки приложения нужно зайти в Настройки->Безопасность->Администраторы устройства->Включить приложение.

Соответственно, в AdminReceiver.java нужно будет подстроить под ваши нужды.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы