zeuss56
@zeuss56
пхпшу на коленке, нодирую по вечерам

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

Как отправить СМС на Android в обход запроса на отправку, что бы пользователь не видел диалог "Отправить СМС? Это может стоить вам денег"? Возможно ли это в принципе на устройстве без root с Android 5.0+?
  • Вопрос задан
  • 144 просмотра
Решения вопроса 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 нужно будет подстроить под ваши нужды.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Plazius Москва
от 170 000 руб.
Blogman Оренбург
от 20 000 до 110 000 руб.
Immoviewer Ярославль
от 1 500 до 2 500 usd.
24 сент. 2018, в 06:56
500 руб./в час
24 сент. 2018, в 06:41
1000 руб./за проект
24 сент. 2018, в 05:38
400 руб./в час