我有一个非常简单的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中得到任何异常或任何错误.我尝试在服务中运行监听器 - 同样的事情.
我觉得这很棘手.连接USB(用于调试)和拔下插头时,手机的行为会有所不同.差异在于睡眠模式 - USB连接手机似乎更加活跃和响应,没有 - 更少.例如,我有一个闹钟唤醒手机并调整音量.连接时 - 在睡眠状态下工作得非常好(每隔10秒调整一次警报触发器的音量).虽然没有连接 - 很少工作(仅在随机警报触发器上调整音量,假设在20到50秒之间).
如何在拔下插头时调试手机?我怎么能强制手机与USB连接完全相同,没有?部分唤醒锁(没有屏幕的那个)没有帮助.这很奇怪,这使得开发真的很痛苦.
我有非常通用的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) 我找不到从AlarmManager启动IntentService的方法.它对于普通服务很简单(将它添加到清单中,然后将其包装在Intent中),但我无法使其与IntentService一起工作 - 应用程序不断崩溃"java.lang.RuntimeException:无法实例化服务".IntentService本身没有任何问题(1行代码).有帮助吗?
如果可以在Windows Phone 8中以编程方式获取电话号码(来自SIM卡),我似乎无法找到任何信息.我可以获取有关我的联系人的信息,但无法获取我自己的电话号码.任何提示?
我有一个等待的接收器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%的排放量.即使没有呼叫,这个百分比也在增加- 因此接收器不 …
我CheckBoxPreference在我PreferenceActivity用来设置一个值.稍后,我想从Receiver和/或Service检查该值.findPreference()方法不能从该上下文中获得.我知道,SharedPreferences无论如何都存储了这个偏好值,但关键是什么?我怎样才能获得复选框的值?