如何将BroadcastReceiver方法调用到另一个方法?

时间:2015-11-29 06:17:36

标签: android broadcastreceiver

我想调用BroadcastReceiver方法来执行代码,而用户没有使用该应用程序,但我不知道如何实现这一点。

以下是代码:

public class MainActivity extends Activity{

    private BroadcastReceiver intentReceiver = new BroadcastReceiver(){
         // this method is what I want to call
    }

    public static void Toast(Context context, Intent intent){
        // this is where I want to call the BroadcastReceiver
    }
}

我已经收到并使用BroadcastReceiver发送短信作为我的应用程序应该工作。 我现在唯一想解决的问题是,当我的应用程序没有被用户使用时,如何在MainActivity中执行代码?因为我发现当应用程序不使用时,处于另一个活动的BroadcastReceiver是唯一运行的。 在我的应用程序中,我使用SharedPreferences来保存和更新应用程序。就像应用程序收到" ON"按钮将显示,关闭按钮将隐藏,否则。这已经很好了。 前一段时间,我尝试从MainActivity.java调用toast()方法到SMSReceiver.java(它只运行后台包括BroadcastReceiver)来查看我调用的方法是否会执行,我在toast中包含toast.maketext() () 方法。是的,它执行是因为出现了Toa​​st消息。

现在,我想如果我只将带有在应用程序使用时执行的SharedPreferences的代码放在那个toast()方法上,那么它也会像toast()方法运行前一段时间执行而我的问题将被解决。但是,我不知道如何才能实现这一点,因为我无法调用代码所在的方法。请帮忙。

3 个答案:

答案 0 :(得分:0)

您需要定义广播应响应的操作:

public static final String ACTION_NAME = "com.application.ACTION";

为听众发送Intent以作出反应:

Intent intent = new Intent(ACTION_NAME);
intent.putExtra(OPTIONAL_EXTRA_KEY, "your optional extra value");
yourContext.sendBroadcast(intent);

要收听广播,您需要定义Receiver对象。

private final BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // React to the broadcast.
    }
};

现在你必须注册这个BroadcastReceiver:

IntentFilter filter = new IntentFilter(ACTION_NAME);
yourActivity.registerReceiver(receiver, filter);

取消注册:

yourActivity.unregisterReceiver(receiver);

我通常在onResume和onPause中注册和取消注册,但您的应用程序可能需要在不同的地方。

答案 1 :(得分:0)

除透视之外的其他方式是我为解决问题所做的工作。在静态方法中,你不能调用BroadcastReceiver,因为BroadcastReceiver方法不是静态方法,你不能像我的

那样把单词静态放在它上面
chmod +x move.command 

静态用于静态,非静态用于非静态。

因为我只想在Application不使用时调用SharedPreferences来保存数据,所以我只是放置SharedPreferences:SharedPreferences的初始化,编辑和保存我的静态方法。问题解决了!

答案 2 :(得分:0)

如果您想在用户未使用您的应用时执行某些代码,则必须使用服务。我真的建议你使用IntentService