我需要在我的应用程序中使用全局变量。变量将在BroadcastReceiver中设置并周期性更改。我可以在服务中的线程中使用它。我的代码:为什么BroadcastReceiver不能在应用程序中更改全局变量
创建应用程序类的全局变量:
package com.bklah.blah;
import android.app.Application;
public class ApplicationBlah extends Application
{
public boolean eSettings;
public boolean getSettings()
{
return this.eSettings;
}
public void setSettings(boolean eSettings)
{
this.eSettings = eSettings;
}
}
我decrale它AndroidManifest文件:
<application android:icon="@drawable/icon"
android:label="@string/sAppName"
android:theme="@android:style/Theme.NoTitleBar"
android:name=".ApplicationBlah">
<receiver android:name=".BroadcastBlah"
android:process=":remote" />
我定期通过广播接收器改变变量cicle:
public class BroadcastBlah extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
((ApplicationBlah)context.getApplicationContext()).setSettings(true);
// or ...
// ((ApplicationBlah)getApplication()).setSettings(true);
}
}
我尝试使用线程服务中的cicle中的变量:
public class ServiceBlah extends Service
{
public static Thread threadBlah = null;
public String fUse(Context context)
{
boolean eSeetingsCurrent1 =((ApplicationBlah)context.getApplicationContext()).eSettings;
boolean eSeetingsCurrent2 = ApplicationBlah.eSettings;
boolean eSeetingsCurrent3 = ((ApplicationBlah)context.getApplicationContext()).getSettings();
// --- all this variables always == false, but i need true from Receiver
}
public void fThreadBlah(final Context context)
{
final Handler handler = new Handler()
{
@Override
public void handleMessage(Message message) { ... }
};
threadBlah = new Thread()
{
@Override
public void run()
{
final Message message = handler.obtainMessage(1, fUse(context));
handler.sendMessage(message);
}
};
threadBlah.setPriority(Thread.MAX_PRIORITY);
threadBlah.start();
}
}
但是我总是在全局变量中出现错误。请说我的错误是什么?
你的onReceive甚至被称为? – FWeigl 2013-04-24 08:57:45
@Ascorbin,没错,的onReceive呼吁其事件(我删除登录功能的onReceive用于清除的代码) – 2013-04-24 09:04:08
不能确定,但是是有可能,你必须做出eSettings作为一个静态变量?或者制作一个ApplicationBlah的单身人士? – dumazy 2013-04-24 09:06:44