我做了一个简单的加速度计应用程序,我想做一个配套的小部件。但是每次向widgetprovider添加传感器时,都会出现以下错误:
07-25 10:31:01.337:E/AndroidRuntime(8908):致命异常:main 07-25 10:31:01.337:E/AndroidRuntime(8908):java.lang.RuntimeException:无法启动接收器com.example.axelo.axeloAppWidgetProvider:java.lang.NullPointerException 07-25 10:31:01.337:E/AndroidRuntime(8908):at Android.app.ActivityThread.HandlereCeiver(ActivityThread.java:2153)Read.Access$1500(ActivityThread.java:127)07-25 10:31:01.337:E/AndroidRuntime(8908):at Android.app.ActivityThread$H.HandleMessage(ActivityThread.java:1208)07-25 10:31:01.337:E/AndroidRuntime(8908):at Android.os.handler.DispatchMessage(handler.java:99)07-25 10:31:01.337:E/AndroidRuntime(8908):at 8908):at android.app.activitythread.main(activitythread.java:4448)07-25 10:31:01.337:e/androidruntime(8908):at java.lang.reflect.Method.invokenative(本机方法)07-25 10:31:01.337:e/androidruntime(8908):at java.lang.reflect.Method.invoke(Method.java:511)07-25 10:31:01.337:e/androidruntime(8908):at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:823)07-25 10:31:01.337:e/androidruntime(8908):at com.android.internal.os.zygoteinite.java:590)07-25 10:31:01.337:at.main(本机方法)07-25 10:31:01.337:e/AndroidRuntime(8908):原因:java.lang.nullPointerException 07-25 10:31:01.337:e/AndroidRuntime(8908):at com.example.axelo.axeloAppWidgetProvider.onUpdate(AxeloAppWidgetProvider.java:29)07-25 10:31:01.337:e/AndroidRuntime(8908):at App.ActivityThread.HandleReceiver(ActivityThread.java:2146)07-25 10:31:01.337:e/AndroidRuntime(8908):...10多个
这就是我的小部件类的样子
package com.example.axelo;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.TextView;
public class AxeloAppWidgetProvider extends AppWidgetProvider implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mSensor;
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
final int N = appWidgetIds.length;
// Perform this loop procedure for each App Widget that belongs to this provider
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null){
Log.v("SENSOR_SERVICE","accelerometer found!");
}
else {
Log.v("SENSOR_SERVICE","Not found!");
}
// Create an Intent to launch MainActivity
Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
// Get the layout for the App Widget and attach an on-click listener
// to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.axelo_widget);
views.setOnClickPendingIntent(R.id.button, pendingIntent);
// // Show changes on screen.
views.setTextViewText(R.id.coord_X, Float.toString(linear_acceleration[0]));
views.setTextViewText(R.id.coord_Y, Float.toString(linear_acceleration[1]));
views.setTextViewText(R.id.coord_Z, Float.toString(linear_acceleration[2]));
// Tell the AppWidgetManager to perform an update on the current app widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
float[] gravity={(float) 9.81,(float) 9.81,(float) 9.81};
float[] linear_acceleration=new float[3];
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
final float alpha = (float) 0.8;
Log.v("SENSOR_SERVICE", "on sensor change");
// Isolate the force of gravity with the low-pass filter.
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
// Remove the gravity contribution with the high-pass filter.
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
}
}
请告诉我哪里出错了,还是没有办法向小部件添加传感器?
我认为传感器小部件不适用这种方式,您应该扩展Activity而不是AppWidgetProvider,不要忘记RegisterListener/UnRegisterListener,您还可以做更多的事情您可以将Activity类添加到小部件清单中,并将代码正常地放在该类中,您可以从widget中为该活动设置一个按钮ClickPendingIntent。
我使用的是flatter,我想给一个小部件添加一个边框(在本例中是widget)。 我尝试了和,但没有看到如何添加边框。
问题内容: 我想在JDialog中添加诸如TextField,Button等组件。 问题答案: 1)首先创建一个Jpanel 2)将组件添加到该JPanel 3)创建JDialog 4)将JPanel添加到JDialog
直到最近,我还只是在使用一个简单的Java项目。我最近决定将其升级为使用gradle包装器和NetBeans12,但现在该程序无法检测beep3.wav文件。 我看过这个、这个和很多其他的页面,但是没有一个关于向jar添加文件的信息,所以我假设我正在寻找错误的信息。 你能帮个忙吗?我只需要获得wav文件,以便在构建项目时自动插入到jar中。
问题内容: 我如何在tkinter窗口小部件居中的情况下向tkinter窗口添加填充?我试过了: 和 我只想在标签顶部填充30像素。 问题答案: 填充选项和的和方法可利用一个 2元组 表示左/右和上/下填充。 这是一个例子:
问题内容: 我正在使用一个简单的消息传递系统,并且需要将以下内容添加到Tkinter文本小部件中: 拼写检查 更改字体的选项(在选定的文本上) 更改字体颜色的选项(在选定的文本上) 更改字体大小的选项(在选定的文本上) 我了解tkinter文本小部件可以通过标记机制使用多种字体和颜色,但是我不知道如何利用这些功能。 如何使用“文本”小部件的功能实现这些功能?具体来说,如何更改字体系列,单词的颜色和
我想问一下,我如何在我的应用程序中动态添加一些小部件,一个接一个,而不是一次添加完。这些小部件被添加到包含命令的for循环中,并由按钮触发。所以我想知道是否有办法在执行结束时逐渐显示输出,而不是一次显示完。起初,我试图在for循环中添加延迟,但恐怕这与每次构建输出的方式有关。 编辑:嗯,似乎我没有很好地理解和的用法,所以我对他们(或time.sleep)的尝试没有成功在所有。但显然,这是我问题的解