先看下效果吧!
MyAppWidgetProvider .java
public class MyAppWidgetProvider extends AppWidgetProvider{
private Timer timer;
private int[] appWidgetIds;
private AppWidgetManager appWidgetManager;
private Context context;
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds){
super.onUpdate(context, appWidgetManager, appWidgetIds);
this.appWidgetIds = appWidgetIds;
this.appWidgetManager = appWidgetManager;
this.context = context;
Intent intent = new Intent(context,MyLocation.class);
context.startService(intent);
// views.setTextViewText(R.id.tvMsg, "text");
//appWidgetManager.updateAppWidget(appWidgetIds, views);
}
}
service:
public class MyLocation extends Service{
public ArrayList<String> locationArr = new ArrayList<String>();
LocationManager lm;
LocationListener ll = new LocationListener() {
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
Location l = lm.getLastKnownLocation(provider);
updtateView(l);
}
@Override
public void onProviderDisabled(String provider) {
updtateView(null);
}
@Override
public void onLocationChanged(Location location) {
updtateView(location);
}
};
@Override
public void onCreate() {
super.onCreate();
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
//设置查询条件
String bestProvider = lm.getBestProvider(getCriteria(), true);
//获取位置
Location l = lm.getLastKnownLocation(bestProvider);
updtateView(l);
//设置监听器
lm.requestLocationUpdates(bestProvider,5000,8,ll);
}
//编写查询条件的方法
public Criteria getCriteria(){
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);//设置查询精度
criteria.setSpeedRequired(false);//设置是否要求速度
criteria.setCostAllowed(false);//设置是否产生费用
criteria.setBearingRequired(false);//设置是否得到方向
criteria.setAltitudeRequired(false);//设置是否得到海拔高度
criteria.setPowerRequirement(Criteria.POWER_LOW);//设置运行的电池级别
return criteria;
}
public void updtateView(Location newLocation){
if (newLocation!=null) {
locationArr.add(String.valueOf(newLocation.getLatitude()));//添加纬度
locationArr.add(String.valueOf(newLocation.getLongitude()));//添加经度
}else {
locationArr.add("没有获取您的位置");
}
}
public ArrayList<String> getMessage(){
if (locationArr!=null) {
return locationArr;
}else {
return null;
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
RemoteViews views = new RemoteViews(this.getPackageName(),
R.layout.firstappwidget);
String content = "您的位置:"+"\n"+"纬度:"+getMessage().get(0)+
"\n"+"经度:"+getMessage().get(1);
views.setTextViewText(R.id.tvMsg,content);
ComponentName thisWidget = new ComponentName(this,MyAppWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, views);
}
public String getTime(){
Time myTime = new Time();
myTime.setToNow();
return myTime.format("%H:%M:%S");
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
系统配置文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="sunny.app"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".MyAppWidgetProvider">
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/appwidget_provider" />
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
</receiver>
<service android:name="sunny.app.MyLocation"/>
</application>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOACTION"/>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="200dp"
android:minHeight="100dp"
android:updatePeriodMillis="1000"
android:initialLayout="@layout/firstappwidget"/>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/tvMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="21dp"
android:textColor="#FFFFFF"
android:background="@drawable/background_shape"/>
</LinearLayout>
- 大小: 124.1 KB
分享到:
相关推荐
例如,天气预报小部件可以实时显示当前天气状况,而日历小部件则能显示即将到来的日程。 #### 1.2 构成元素 AppWidget主要由两部分构成:WidgetProvider(提供者)和RemoteViews(远程视图)。WidgetProvider负责...
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> android:name="android.appwidget.provider" android:resource="@xml/app_widget_info" /> ``` 最后,为了让用户能够添加你的App ...
例如,如果你的Widget显示的是新闻标题,可以定期通过后台服务发送一个更新广播,BroadcastReceiver接收到广播后,使用RemoteViews对象来修改Widget上的文本视图,然后调用AppWidgetManager的updateAppWidget()方法...
在本例中,我们关注的是一个特定类型的AppWidget,它显示时间并每秒更新一次。创建这样一个实时更新的时钟AppWidget涉及到多个关键知识点。 首先,我们需要了解`AppWidgetProvider`。它是AppWidget的主要组件,类似...
这个Activity通常会启动一个Intent,让用户选择AppWidget的大小和位置。 6. **测试和发布**:使用Android Studio的AVD管理器或实际设备进行测试,确保AppWidget正常工作。然后,打包应用并发布到Google Play或其他...
一个简单的AppWidget可能是显示当前时间的时钟,使用TextClock或TextView显示小时和分钟,并通过AlarmManager定期更新时间。通过AppWidgetProvider响应ACTION_TIME_TICK广播,当时间变化时自动更新界面。 总结,App...
- **播放控制小部件**:用于音乐播放器,显示当前播放状态并提供播放/暂停按钮。 7. **优化和注意事项** - **性能优化**:减少不必要的更新,合理设置更新间隔。 - **内存管理**:注意及时释放资源,避免内存...
本教程将深入讲解如何使用AppWidget来创建一个桌面时钟插件,确保其显示的时间与系统时间保持同步,并且在用户点击时能够跳转到相应的应用程序。 首先,我们需要了解AppWidget的基本结构。一个AppWidget通常由以下...
综上所述,"Android appWidget每日一句修正2"的更新很可能优化了对网络状态的检测和处理,使得即使在网络不稳定的情况下,小部件也能正常显示内容或适当地向用户传达网络状况。这样的改进提升了用户体验,减少了因...
这个名为"Android小部件AppWidget.zip"的压缩包包含了一个Android应用的源码,供开发者参考和学习使用。它涉及到Android开发中的几个核心知识点,包括AppWidgetProvider、RemoteViews、BroadcastReceiver以及XML布局...
6. **权限和元数据**:确保在`AndroidManifest.xml`中添加了必要的权限,如`android.permission.BIND_APPWIDGET`。同时,需要为每个Widget尺寸提供相应的`appwidget-provider`元数据,指定最小和最大宽度/高度。 在...
本教程将深入讲解如何在Android Studio中创建一个能够显示当前日期和时间的Widget,这个Widget会随着手机系统时间的改变而自动更新。 首先,我们需要创建一个新的Android项目,并在res/layout目录下设计Widget的...
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> android:name="android.appwidget.provider" android:resource="@xml/hello_widget_provider" /> ``` 在这个例子中,`...
在`BatteryReceiver`的`onReceive()`方法中,可以调用`BatteryManager`的相关方法,如`getBatteryLevel()`来获取电池的当前电量,然后将这些数据传递给Widget进行显示。 至于UI界面的修改,描述中提到存在小瑕疵,...
在Android平台上,`ClockWidget`是一种AppWidget,它允许开发者创建一种桌面小部件,用户可以在主屏幕上添加,显示时间信息,通常包括时钟、日期甚至天气等附加信息。AppWidgets是Android系统的一部分,它们提供了...
源码中会包含处理日期的方法,可能包括获取当前日期、格式化日期字符串以及更新App Widget显示的日期。 4. **Android布局文件(XML)**: 源码中会包含一个XML布局文件,定义了日期显示的UI元素,如TextView,用于...
为了使Widget具有交互性,我们需要在AppWidgetProvider的onReceive()方法中处理ACTION_APPWIDGET_UPDATE和ACTION_APPWIDGET_CLICK广播。当用户点击Widget时,ACTION_APPWIDGET_CLICK会被触发,此时我们可以根据用户...
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> android:name="android.appwidget.provider" android:resource="@xml/app_widget_info" /> ``` 接着,我们需要创建`app_widget_...
- 兼容性:考虑到Android版本的差异,使用`android.appwidget.AppWidgetProviderInfo`来设置最小和目标API级别,确保在不同设备上正常工作。 - 权限:检查是否需要请求任何权限,如读取系统时间等。 以上就是使用...