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

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

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