1

可能重复:
如何在 iPhone 上以编程方式发送短信?

我不确定这是否可能,但我想要实现的是,在征得用户许可后,我的应用程序想通过我的应用程序在他们的手机上发送格式化的短信。我希望它发生在后台而不让他们看到短信输入屏幕,我希望发送的短信不出现在消息列表中,只有格式化的接收消息。

甚至可能吗?最初我想在 iPhone 上实现它,但后来我想将它扩展到 Android 和 wp7。提前致谢。

4

5 回答 5

2

在 iOS 上,不,你不能。

不过,您可以使用第三方服务。

于 2012-11-07T04:13:40.183 回答
2

我不知道其他平台,但在 iOS 上,如果您的应用想要发送短信,它会请求用户许可,用户将被带到短信界面。Apple 对这些非常严格,但在 android 中这可能是可能的。

在 iOS 文档上发送 SMS

编辑:我不知道你想做什么,但为什么不使用网络呢?如果您尝试发送用户不知道内容或目的地的消息,则不需要通过 SMS。

于 2012-11-07T04:14:27.703 回答
0

我能想到的唯一选择是将 NSHTTPURLRequest 发送到提供 SMS 网关的 Web 服务。您当然可以在后台执行此操作,尽管您(开发人员,而不是用户)可能会承担发送消息的费用,并且发件人似乎不是用户。

于 2012-11-07T05:28:19.483 回答
0

您可以像这样在后台发送短信:

在这里,我使用了单击按钮,您可以在后台发送短信,用户面前不会出现任何屏幕。(注意:如果适用,则返回,否则返回空值。)

获取所有者的电话号码:

 TelephonyManager tMgr =(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
 String number = tMgr.getLine1Number();

Pending Intent在点击事件中写入此代码。

String message = "HI THIS IS TEST SMS IN ANDROID.";             

/** Creating a pending intent which will be broadcasted when an sms message is successfully sent */
PendingIntent piSent = PendingIntent.getBroadcast(getBaseContext(), 0, new Intent("sent_msg") , 0);

/** Creating a pending intent which will be broadcasted when an sms message is successfully delivered */
PendingIntent piDelivered = PendingIntent.getBroadcast(getBaseContext(), 0, new Intent("delivered_msg"), 0);

/** Getting an instance of SmsManager to sent sms message from the application*/
SmsManager smsManager = SmsManager.getDefault();                

/** Sending the Sms message to the intended party */
smsManager.sendTextMessage(number, null, message, piSent, piDelivered);

SmsNotifications创建类名extends BroadcastReceiver

/**
 * This class handles the SMS sent and sms delivery broadcast intents
 */
public class SmsNotifications extends BroadcastReceiver{

    /**
     * This method will be invoked when the sms sent or sms delivery broadcast intent is received 
     */ 
    @Override
    public void onReceive(Context context, Intent intent) {

        /**
         * Getting the intent action name to identify the broadcast intent ( whether sms sent or sms delivery ) 
         */
        String actionName = intent.getAction();


        if(actionName.equals("sent_msg")){
            switch(getResultCode()){
                case Activity.RESULT_OK:
                    Toast.makeText(context, "Message is sent successfully" , Toast.LENGTH_SHORT).show();
                    break;
                default:
                    Toast.makeText(context, "Error in sending Message", Toast.LENGTH_SHORT).show();
                    break;              
            }           
        }

        if(actionName.equals("delivered_msg")){
            switch(getResultCode()){
                case Activity.RESULT_OK:
                    Toast.makeText(context, "Message is delivered" , Toast.LENGTH_SHORT).show();
                    break;
                default:
                    Toast.makeText(context, "Error in the delivery of message", Toast.LENGTH_SHORT).show();
                    break;

            }

        }       
    }
}

管理您的清单文件:

允许 :

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

 <receiver android:name=".SmsNotifications" >
            <intent-filter >
                <action android:name="sent_msg" />
                <action android:name="delivered_msg" />                                
            </intent-filter>
        </receiver>
于 2012-11-07T05:50:30.810 回答
0

您不能在 Windows Phone 7 中执行此操作。您必须启动一个SmsComposeTask类似于MFMessageComposeViewController. 这意味着所有的文本发送逻辑都在那里处理,您只能调整一些参数。

于 2012-11-07T07:27:35.333 回答