отправить смс без запроса и прочитать полученное смс

Я создаю приложение с помощью flash cs 6. Мне нужно отправить смс из моего приложения. Я создал собственное расширение, которое будет отправлять смс. Он использует диспетчер смс по умолчанию. Он работает нормально. Но когда я использую его для отправки смс, он предлагает мне сообщение о том, что это может привести к списанию средств с вашего мобильного счета. Есть ли способ отправить смс без этого сообщения? Я слышал, как какое-то приложение спрашивает, может ли приложение отправлять смс или нет в начале установки. И когда пользователь соглашается отправить смс из приложения, приложение никогда не выводит это сообщение. Есть ли способ сделать это ? И я также хочу, чтобы приложение читало смс, которые отправляются от меня.

Я использовал следующий код для отправки смс:

 SmsManager smsManager = SmsManager.getDefault();
 smsManager.sendTextMessage(recipient, null, text, null, null);

Теперь я также могу читать смс, используя следующий код:

Uri uri = Uri.parse("content://sms/inbox");
Cursor c= context.getActivity().getContentResolver().query(uri, null, null ,null,null); 
c.moveToFirst();  

String body = c.getString(c.getColumnIndexOrThrow("body")).toString();
c.close();

Есть ли способ получить смс в приложении, когда устройство впервые получает смс? Я хочу читать смс, отправленные только с меня/сервера.


person TheGunners    schedule 01.09.2014    source источник


Ответы (1)


Вы, вероятно, захотите изучить следующие разрешения:

<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" />

Чтобы получать SMS, когда оно приходит на устройство, вам нужно настроить приемник и добавить фильтр намерений SMS_RECEIVED:

<receiver android:name="YourSMSReceiverClass" android:exported="true" > 
    <intent-filter android:priority="1000"> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter> 
</receiver>

В вашем приемнике вы можете обработать SMS для ваших нужд:

public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
public static final String SMS_EXTRA_NAME = "pdus";

@Override
public void onReceive( Context context, Intent intent ) 
{
    if (SMS_RECEIVED_ACTION.equals(intent.getAction())) 
    {
        Bundle extras = intent.getExtras();
        if ( extras != null )
        {
            Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME );

            for ( int i = 0; i < smsExtra.length; ++i )
            {
                SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);

                String message = sms.getMessageBody().toString();
                String address = sms.getOriginatingAddress();

                // Here you can add any your code to work with incoming SMS
            }
        }
    }
}

Также в вашем приемнике вы можете остановить постановку СМС на входящие, позвонив:

this.abortBroadcast();
person Michael    schedule 01.09.2014
comment
Спасибо за ответ. Я использую родное расширение. Я действительно не знаю, как настроить приемник в собственном расширении. Насколько я понимаю, при использовании расширения flash вызывает функцию для java, и она вызывается только один раз. Если я настрою функцию приемника, будет ли она постоянно ждать входящих смс или мне снова вызвать эту функцию из флэш-памяти? И я также хотел бы знать, можно ли отменить процесс отправки смс, если он занял слишком много времени? - person TheGunners; 02.09.2014
comment
Вы определяете получателей так же, как и в нативном приложении. Вы добавляете класс в свою собственную библиотеку расширений и реализуете BroadcastReceiver, а затем передаете имя класса в приемник, как обычно. Единственное, что вам нужно сделать, это заставить работать связь, встроенную в as3, что вы можете сделать с помощью статической ссылки на ваш FREContext. - person Michael; 03.09.2014
comment
Я забыл упомянуть, что вы добавили приемник в свои дополнения манифеста вашего дескриптора приложения AIR! - person Michael; 03.09.2014