2014-09-01 127 views
1

我使用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(); 

有没有办法第一时接收的短信应用的设备收到短信?我只想读取从我/服务器发送的短信。

+0

发布您的代码? – Kishan 2014-09-01 05:35:48

回答

0

你可能要考虑以下权限:

<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_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 
      } 
     } 
    } 
} 

同样在您的接收器中,您可以通过呼叫来阻止SMS进入呼入:

this.abortBroadcast(); 
+0

感谢您的答案。我使用本机扩展。我真的不知道如何在Native扩展中设置接收器。据我所知,当使用扩展名时,flash会向java调用一个函数,并且它只会调用一次。如果我设置接收器功能,它会不会等待传入的短信,或者我应该再次从闪光灯调用该功能?而且我也想知道如果发送短信过程花费太长时间,是否可以取消发送? – TheGunners 2014-09-02 07:35:32

+0

您可以像本机应用程序中那样定义接收者。您将一个类添加到您的本机扩展库中,然后实现一个BroadcastReceiver,然后将类名传递到接收器中,就像正常一样。你必须做的唯一事情就是让原生的as3通信工作,你可以通过静态引用你的FREContext来完成。 – Michael 2014-09-03 04:20:59

+0

我忘了提及你将接收器添加到你的AIR应用程序描述符的清单中! – Michael 2014-09-03 04:22:16