2013-05-08 27 views
0

我正在尝试为我的应用创建一个dashclock扩展。基本上我的应用程序的主要活动是从传感器读取数据并显示它。现在,Dashclock扩展了扩展Service的DashClockExnnsion。我的疑问是,我应该如何让这项服务从应用程序的主类中提问数据。如果我正在使用startService()的意图,那么我会在小部件中获得空值。如何在小部件显示之前获取该数据。如何定期从活动中获取数据?

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; 

    } 

} 

回答

2

From the documentation:

onUpdateData(INT)将在默认情况下,每小时可称为粗略一次,但 扩展可以使用的方法,如setUpdateWhenScreenOn(布尔)和 addWatchContentUris(String[])要求更频繁的更新。

如果你点击该链接,你会看到这个文档addWatchContentUris(字符串[])

请求主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); 
相关问题