小编jac*_*cek的帖子

SensorEventListener未使用unregisterListener()方法取消注册

我有一个非常简单的Android应用程序:在活动中我有一个按钮,我启动/停止OrientationListener.但是,在取消注册后,在ddms中我仍然可以看到线程android.hardware.SensorManager $ SensorThread](正在运行).

注册码:

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
if (sensors.size() > 0)
{
    sensor = sensors.get(0);
    running = sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}
Run Code Online (Sandbox Code Playgroud)

和取消注册:

try
{
    if (sensorManager != null && sensorEventListener != null)
    {
        sensorManager.unregisterListener(sensorEventListener,sensor);
        running = false;
    }
}
catch (Exception e)
{
    Log.w(TAG, e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

unregisterListener()方法确实被执行,但它不会经常杀死传感器线程,这会使电池继续运行和耗尽.几个小时后,我的应用程序列出了20-30%的电池消耗.怎么可能?如何确保传感器未注册?我没有在logcat中得到任何异常或任何错误.我尝试在服务中运行监听器 - 同样的事情.

java android sensor listener

28
推荐指数
2
解决办法
8020
查看次数

如何在没有USB连接的手机睡眠模式下调试Android应用程序

我觉得这很棘手.连接USB(用于调试)和拔下插头时,手机的行为会有所不同.差异在于睡眠模式 - USB连接手机似乎更加活跃和响应,没有 - 更少.例如,我有一个闹钟唤醒手机并调整音量.连接时 - 在睡眠状态下工作得非常好(每隔10秒调整一次警报触发器的音量).虽然没有连接 - 很少工作(仅在随机警报触发器上调整音量,假设在20到50秒之间).

如何在拔下插头时调试手机?我怎么能强制手机与USB连接完全相同,没有?部分唤醒锁(没有屏幕的那个)没有帮助.这很奇怪,这使得开发真的很痛苦.

debugging android

9
推荐指数
1
解决办法
5328
查看次数

使用RestSharp从一个资源反序列化不同的数据输出

我有非常通用的web服务,它响应许多标准的http状态.但是,它会根据这些状态返回不同的类型.这是完全正确的REST实现:我获取状态为200(OK)的Person实体,但是当发生错误时,例如auth问题,我收到带有错误消息列表的403(Forbidden)(说明令牌已过期或我的帐户是不活动等).

不幸的是,使用RestSharp我只能"绑定"到我应该期望的一种数据类型:

  client.ExecuteAsync<Person>(request, (response) =>
  {
        callback(response.Data);
  });
Run Code Online (Sandbox Code Playgroud)

当状态不是200时,我该如何捕获错误消息?当然,我可以手动执行此操作并自行反序列化响应内容,但我认为应该有一些更清晰,更好的方法来实现它.我想用这样的东西:

  client.ExecuteAsync<Person, ErrorList>(request, (response) =>
  {
        if (response.StatusCode == HttpStatusCode.OK)
        {
            Callback(response.Data);
        }
        else if (response.StatusCode == HttpStatusCode.OK)
        {
            ErrorCallback(response.Errors);
        }
  });
Run Code Online (Sandbox Code Playgroud)

c# rest web-services http restsharp

7
推荐指数
1
解决办法
3107
查看次数

IntentService和AlarmManager

可能重复:
Android RuntimeException:无法实例化服务

我找不到从AlarmManager启动IntentService的方法.它对于普通服务很简单(将它添加到清单中,然后将其包装在Intent中),但我无法使其与IntentService一起工作 - 应用程序不断崩溃"java.lang.RuntimeException:无法实例化服务".IntentService本身没有任何问题(1行代码).有帮助吗?

android alarmmanager intentservice

4
推荐指数
1
解决办法
2229
查看次数

获取Windows Phone 8中的电话号码

如果可以在Windows Phone 8中以编程方式获取电话号码(来自SIM卡),我似乎无法找到任何信息.我​​可以获取有关我的联系人的信息,但无法获取我自己的电话号码.任何提示?

c# windows-phone-8

2
推荐指数
1
解决办法
3699
查看次数

带有监听器的BroadcastReceiver在不使用时会耗尽电池电量

我有一个等待的接收器TelephonyManager.ACTION_PHONE_STATE_CHANGED:

public void onReceive(Context context, Intent intent) {
String theAction = intent.getAction();  
if (theAction != null && theAction.equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {
        CONTEXT = context;
        startListening();   
}
Run Code Online (Sandbox Code Playgroud)

当它得到它,我注册听众(为方向传感器):

public void startListening() {  
    sensorManager = (SensorManager) CONTEXT.getSystemService(Context.SENSOR_SERVICE);
    List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
    if (sensors.size() > 0) {
        sensor = sensors.get(0);
        running = sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
    }
}   
Run Code Online (Sandbox Code Playgroud)

然后,在Listener的onSensorChanged()方法中:

public void onSensorChanged(SensorEvent event) {
    if(running) {   
        sensorManager.unregisterListener(this);
        // do some not significant stuff here
    }
Run Code Online (Sandbox Code Playgroud)

现在问题是:我接到电话,接收器启动,然后听众启动,一切按设计工作.但是,稍后,当我查看电池统计数据时,我的应用程序被列为2-3%的排放量.即使没有呼叫,这个百分比也在增加- 因此接收器不 …

java android battery broadcastreceiver

1
推荐指数
1
解决办法
2303
查看次数

如何在Android中的Receiver/Service中获取CheckBoxPreference值?

CheckBoxPreference在我PreferenceActivity用来设置一个值.稍后,我想从Receiver和/或Service检查该值.findPreference()方法不能从该上下文中获得.我知道,SharedPreferences无论如何都存储了这个偏好值,但关键是什么?我怎样才能获得复选框的值?

java service android receiver checkboxpreference

1
推荐指数
1
解决办法
4340
查看次数