我正在尝试为我的应用制作一个dashclock扩展程序。基本上我的应用程序的主要活动从传感器读取数据并显示它。现在,dashclock扩展了扩展Service的DashClockExntension。我的疑问是,我应该如何使这项服务从应用程序的主类中提问数据。如果我使用startService()的intent,那么我在widget中获取null值。如何在窗口小部件显示之前获取该数据。
package com.thePaze.Ambiance;
import android.content.Intent;
import com.google.android.apps.dashclock.api.DashClockExtension;
import com.google.android.apps.dashclock.api.ExtensionData;
public class DashMain extends DashClockExtension {
String temp, humidity;
@Override
protected void onUpdateData(int reason) {
// TODO Auto-generated method stub
publishUpdate(new ExtensionData().visible(true).status("Ambient").icon(R.drawable.ic_launcher).expandedTitle("Temp & Humidity").expandedBody("Temperature: " + temp+ "\nHumidity: " +humidity)
.clickIntent(new Intent(DashMain.this, SensorMain.class))
);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
super.onStartCommand(intent, flags, startId);
temp = intent.getStringExtra(temp);
humidity = intent.getStringExtra(humidity);
return START_STICKY;
}
}
答案 0 :(得分:2)
onUpdateData(int)默认情况下每小时大致调用一次,但是 扩展可以使用setUpdateWhenScreenOn(boolean)和 addWatchContentUris(String[])请求更频繁的更新。
如果单击该链接,您将看到addWatchContentUris(String [])
的此文档请求主DashClock应用程序观察给定的内容URI (使用ContentResolver.registerContentObserver)并调用它 观察到更改时扩展的onUpdateData(int)方法。这个 通常应该在onInitialize(boolean)方法中调用。
您熟悉内容提供商吗?它是一种在活动之间共享数据的方法。观看内容提供商的活动会收到有关更新的通知。这是我所知道的增加dashclock更新频率的唯一方法。
编辑:添加更多细节
向androidmanifest.xml添加内容提供者条目。请注意,权限应该从您的包名称开始,但它不必,它实际上只是一个任意标识符。
<provider android:authorities="com.mypackage.myapp.myprovider"
android:name=".MyProviderClassName"
android:exported="true"/>
现在创建一个名为MyProviderClassName的类,它扩展了ContentProvider。您甚至不需要实现任何方法,只需返回默认值。
class MyProviderClassName extends ContentProvider {
@Override
public boolean onCreate() {
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
return null;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
}
现在,在onInitialize()的扩展类中,添加以下内容:
addWatchContentUris(new String[] { "content://" + YOUR_AUTHORITY_FROM_MANIFEST }
每当您希望从活动中更新扩展程序时,只需调用以下方法:
getContentResolver().notifyChange(Uri.parse("content://" + YOUR_AUTHORITY_FROM_MANIFEST), null);