好的,这让我疯了!请考虑以下代码:
public class PhoneConfigService extends Activity
{
public int CheckAPIVersion()
{
int version = Build.VERSION.SDK_INT;
return version;
}
//Basically I am trying to check if data saver mode if enabled for devices with API level greater than
@TargetApi(24)
public boolean CheckIfAllowDataSaverModeEnabledForApp() { //line number 70
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (CheckAPIVersion() < 24) {
return false;
} else {
switch (connMgr.getRestrictBackgroundStatus()) {
case RESTRICT_BACKGROUND_STATUS_ENABLED:
// Background data usage and push notifications are enabled which will block or limit the usage of this app
return true;
case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
case RESTRICT_BACKGROUND_STATUS_DISABLED:
// Data Saver is disabled or the app is whitelisted
}
}
return false;
}
}
//My main class
public class TestChanges extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.test_changes);
String dataSaverMode = Boolean.toString(inst.CheckIfAllowDataSaverModeEnabledForApp());
TextView tvSummary = (TextView) findViewById(R.id.summary);
if(dataSaverMode == "true")
{
//Do some logic
}
}
但每当我休息一下并进入CheckIfAllowDataSaverModeEnabledForApp()
功能时,我就会继续:
PhoneConfigService.java:70
中没有可执行代码
即使我已将以下内容添加到应用的build.gradle
文件中:
debug {
debuggable true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt')
signingConfig signingConfigs.release
}
仍然不有所作为。我检查了构建变体,我在调试模式下运行应用程序。
更新:请注意,它会在之前抛出错误,甚至会进入CheckIfAllowDataSaverModeEnabledForApp()
块。它甚至无法到达方法内的第一个支柱“{
”。
更新II:根据@MC Emperor的评论,我删除了或者更确切地说将断点移到了方法中的某个位置,我现在得到了一个不同的例外:
java.lang.IllegalStateException:系统服务不可用 onCreate()之前的活动
经过一些阅读后,我发现可能是我onCreate()
课程中的TestChanges
方法导致的,我正在实例化PhoneConfigService
课程。
PhoneConfigService inst = new PhoneConfigService();
。我怎么能绕过这个?显然我不能使用new
来实例化该类。
我禁用了Instant Run,重建(和清理)了项目和相同的结果。
答案 0 :(得分:0)
extends Activity
类中添加了一个构造函数(如下所示)并删除了Context mContext;
public PhoneConfigService(Context mContext) {
this.mContext = mContext;
}
这是我的问题的根本原因。我知道因为@Raghunandan的答案在这里发布:How can I use getSystemService in a non-activity class (LocationManager)? CheckIfAllowDataSaverModeEnabledForApp()
在我的Context
方法中,我将ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
作为参数传递,并将此行从:ConnectivityManager connMgr = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
更改为:TestChanges
在我的PhoneConfigService
类中,我在实例化PhoneConfigService inst = new PhoneConfigService(TestChanges.this);
类时传递了上下文,如下所示:{{1}}并且所有内容都按预期工作。感谢大家的宝贵意见。