【问题标题】:Android from receiver to activityAndroid 从接收者到活动
【发布时间】:2010-07-14 21:22:29
【问题描述】:

我刚刚进入 Android 开发,我有一个关于接收器类和活动类之间通信的问题。我对 JAVA 和 Android 很陌生,所以我希望我听起来不会太愚蠢。我正在开发一个应用程序,在该应用程序中截获一条 SMS 消息,然后根据该 SMS 的各种元素,一旦将其保存到收件箱,我可能会删除它。我有一个拦截 txt 消息的接收器类,我现在还可以使用按钮从我的收件箱中删除带有活动类中的代码的消息。我遇到的问题是在接收器类和删除消息的代码所在的活动类之间进行通信。我尝试将该代码直接放入接收器类,但我确信你们中的大多数人已经知道 BroadcastReceiver 类似乎不支持我需要删除消息的内容。我一直在寻找这个问题的答案一段时间,但一直找不到任何东西。老实说,如果我看到它,我不确定我是否对 JAVA 和 Android 有足够的了解,甚至无法识别解决方案。

【问题讨论】:

    标签: android android-activity sms broadcastreceiver


    【解决方案1】:

    如果您需要在没有界面的情况下完成工作,请查看创建 Service,如果您需要用户界面,只需启动 Activity

    你可以使用接收者onReceive方法的Context参数来启动一个新的服务/活动

    您可以使用Extras 在上下文之间传递参数。因此,您可以额外添加消息 ID 或整个消息,并将其传递给您的服务/活动并在那里处理。

    【讨论】:

    • 非常感谢您的快速回复,非常感谢。我接受了您的建议,一旦收到短信,我就会启动一项服务以删除某些消息。问题是我从服务的 onCreate 方法中调用了删除函数。似乎这仅允许在您第一次收到 txt 消息时运行删除功能。任何以下短信都不会触发我假设的删除功能,因为该服务已经创建。我尝试将函数调用放在服务的 onResume 函数中,但这也不起作用。你知道怎么做吗
    • 没关系,我将函数调用移至 onStart 方法,然后在完成我想做的事情并解决我的问题后停止服务。
    【解决方案2】:

    您可以使用 IntentService 实现处理消息逻辑。当您的接收者收到新的传入消息时,启动 IntentService 传递带有消息数据的意图。

    接收者

    onReceive(Context context, Intent intent) {
        //Setup Intent
        Intent i = new Intent(context, MyIntentService.class);
        i.setAction(MyIntentService.HANDLE_MESSAGE);        
        //Pass data to intent
        i.putExtra(MyIntentService.MESSAGE_DATA, data);
        //Start Intent Service          
        context.startService(i);
    }
    

    我的意图服务

    onHandleIntent(Intent i){
        String action = i.getAction();
        if(action != null && action.equals(MyIntentService.HANDLE_MESSAGE){
            //Get data and implement message logic
        }
    }
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多