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