2015-11-29 71 views
1

我想调用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 
    } 
} 

我已经收到和使用的广播接收器的作为是什么我的应用程序应该是作品发送短信。 我现在想要解决的唯一问题是,如何在MainActivity中执行代码,同时我的应用程序未被用户使用?因为我发现在其他活动中的BroadcastReceiver是应用程序不使用时唯一运行的。 在我的应用程序中,我使用SharedPreferences来保存和更新应用程序。就像如果应用程序接收到“ON”,on按钮将显示,off按钮将隐藏,否则。现在已经很好了。 前一段时间,我尝试从MainActivity.java调用toReceiver()方法到SMSReceiver.java(它只运行后台包含BroadcastReceiver),以查看我调用的方法是否会执行包含toast.maketext()的方法toast()方法。是的,它执行,因为吐司消息出现。

现在,我想如果我只是把应用程序使用时执行的SharedPreferences代码放在那个toast()方法上,它也会像toast()方法运行一段时间一样执行,而我的问题将得到解决。但是,我不知道我怎么能做到这一点,因为我不能调用代码在那里的方法。请帮忙。

回答

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. 
    } 
}; 

现在,你必须注册该广播接收器:

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

并注销:

yourActivity.unregisterReceiver(receiver); 

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

+1

我已收到并发送短信。我现在唯一的问题是如何将该方法放到另一个方法中。我试图把静态广播接收器,但一些红色下划线的代码我得到了一个错误。 – Jobelle

0

其他方式比透视是我已经做了解决我的问题。在静态方法,你不能叫一个BroadcastReceiver,因为BroadcastReceiver的方法是不是静态方法,你不能把静态的话就可以像什么我

public static void(Context context, Intent intent){ 

} 

静态是静态的和非静态的非静态的。

因为我只是想在应用程序没有使用时调用SharedPreferences来保存数据,所以我只是把SharedPreferences:SharedPreferences的初始化,编辑并保存在我的静态方法中。问题解决了!

0

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

相关问题