使用Intent将消息发送到多个联系人

时间:2016-04-13 13:38:38

标签: java android sms

我正在尝试通过Intent在内置的短信应用中发送消息。它的工作正常。这是我的代码

var BookmarkScreenshots = {

    test: function(){
        console.log('BookmarkScreenshots.test() ran');
    },


    fullPageScreenshot: {


        //BookmarkScreenshots.fullPageScreenshot.cache.
        cache: {
            body: document.body,
            html: document.documentElement,
            fullWidthOld: document.width,
            fullHeightOld: document.height,
            originalX: window.scrollX,
            originalY: window.scrollY,
            windowScrollX: BookmarkScreenshots.fullPageScreenshot.cache.originalX,
            fullWidth: document.body.clientWidth,
            fullHeight: Math.max(BookmarkScreenshots.fullPageScreenshot.cache.body.scrollHeight, BookmarkScreenshots.fullPageScreenshot.cache.body.offsetHeight,
            BookmarkScreenshots.fullPageScreenshot.cache.html.clientHeight, BookmarkScreenshots.fullPageScreenshot.cache.html.scrollHeight, BookmarkScreenshots.fullPageScreenshot.cache.html.offsetHeight),
            windowWidth: window.innerWidth,
            windowHeight: window.innerHeight,
            originalOverflowStyle: document.documentElement.style.overflow,
            arrangements: [],
            // pad the vertical scrolling to try to deal with
            // sticky headers, 200 is an arbitrary size
            scrollPad: 200,
            yDelta: BookmarkScreenshots.fullPageScreenshot.cache.windowHeight - (BookmarkScreenshots.fullPageScreenshot.cache.windowHeight > BookmarkScreenshots.fullPageScreenshot.cache.scrollPad ? BookmarkScreenshots.fullPageScreenshot.cache.scrollPad : 0),
            xDelta: BookmarkScreenshots.fullPageScreenshot.cache.windowWidth,
            yPos: BookmarkScreenshots.fullPageScreenshot.cache.fullHeight - BookmarkScreenshots.fullPageScreenshot.cache.yDelta + 1,
            xPos: '',
            numArrangements: '',
            cleanUpTimeout: '',
            port: chrome.runtime.connect({name: 'page capture'}),
            message: {
                msg: 'capture',
                totalWidth: BookmarkScreenshots.fullPageScreenshot.cache.fullWidth,
                totalHeight: BookmarkScreenshots.fullPageScreenshot.cache.fullHeight
            },
        },

        init: function(){
            console.log('ran BookmarkScreenshots.fullPageScreenshot.init()');
        },
    }
}




(function() {
    BookmarkScreenshots.test();
    BookmarkScreenshots.fullPageScreenshot.init();

    console.log('BookmarkScreenshots.fullPageScreenshot.cache.windowScrollX', BookmarkScreenshots.fullPageScreenshot.cache.windowScrollX);
})();

但问题是它在没有单击短信应用程序中的发送按钮的情况下导航到另一个活动。只有在单击消息传递应用程序中的“发送”按钮后,才应转到另一个活动任何人都可以帮我解决这个问题,提前谢谢。

2 个答案:

答案 0 :(得分:2)

让我们清除代码中的轻微误解: 您不应该尝试在代码的相同部分/运行中启动两个意图。

startActivity不会直接执行活动,然后在活动执行完成后返回到代码中的相同位置。而不是异步队列执行的意图。然后您的代码将另一个意图排队等待执行。当前代码完成后(在这种情况下按钮onClick()方法结束)Android队列管理可以开始取消队列。可能第一个意图很快就会被执行,然后通过立即执行第二个意图直接超出。

所以总结一下,你首先在sendSMS中向队列中添加一个intent,然后在onClick中将intent 2添加到队列中,然后再离开。 现在两个意图都已执行。

您需要做的是将sendSMS代码更改为:

Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.setData(Uri.parse("smsto:"));
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address"  ,nums);
smsIntent.putExtra("sms_body"  , "Test ");
// To force the SMS app to return immediately after sent SMS
smsIntent.putExtra("exit_on_sent", true); 
startActivityForResult(smsIntent, MY_SMS_REQUEST_RESPONSE_CODE);

请注意startActivityForResult()方法,该方法指示我们希望Android返回并且" exit_on_sent"额外的,迫使迅速回归。

MY_SMS_REQUEST_RESPONSE_CODE只是您选择用于识别回调方法中返回结果的任何随机代码(即使您当前不希望任何其他返回结果,您将来可能会有一些)。

接下来要做的是删除第二个意图创建和排队。您可以实现以下回调方法(添加到此活动):

@Override
protected void onActivityResult(
        int callbackIdentifier, int resultCode, Intent intent) {
    // Is this the expected sendSMS callback ?
    if (callbackIdentifier== MY_SMS_REQUEST_RESPONSE_CODE) { 
        if (resultCode == RESULT_OK) {
          // Continue where you left off (e.g. execute intent 2)
          Intent intent = new Intent(Main_Act.this, Sample.class);
          startActivity(intent);            
        } else if (resultCode == RESULT_CANCELED) {
            // Error handling/retrying etc
        }
    }
    // Support inherited callback functions
    super.onActivityResult(callbackIdentifier,resultCode,intent);
}

答案 1 :(得分:0)

注意:如果要传递数据并键入,请不要单独调用方法 ,因为会互相删除,您必须以一种方法传递

错误

smsIntent.setData(Uri.parse("smsto:"));
smsIntent.setType("vnd.android-dir/mms-sms");

true

smsIntent.setDataAndType(Uri.parse("smsto:"),"vnd.android-dir/mms-sms");