java – 在Android启动器中托管小部件
发布时间:2020-12-14 05:37:50  所属栏目:Java  来源:网络整理 
            导读:我正在做一个 android的启动器,我被困在小部件部分.我一直在互联网上搜索大约一个半小时,想知道如何在我的应用程序中托管小部件,但没有运气. 我已经经历了一些股票发行人和ADW发射器代码,但是只有几英里的代码,这是我第一次制作发射器. 有人可以指导我如何在
                
                
                
            | 我正在做一个 
 android的启动器,我被困在小部件部分.我一直在互联网上搜索大约一个半小时,想知道如何在我的应用程序中托管小部件,但没有运气. 
  
  我已经经历了一些股票发行人和ADW发射器代码,但是只有几英里的代码,这是我第一次制作发射器. 有人可以指导我如何在我的启动器中添加小部件?或者至少发布任何链接/教程?请谅解,因为这是我的第一次. 解决方法
 尝试这个: 
  
  
  final int APPWIDGET_HOST_ID = 2048;
final int REQUEST_PICK_APPWIDGET = 0;
final int REQUEST_CREATE_APPWIDGET = 5;
AppWidgetManager appWidgetManager;
AppWidgetHost appWidgetHost;
// Let user pick a widget from the list of intalled AppWidgets
public void selectWidget()
{
    int appWidgetId = this.appWidgetHost.allocateAppWidgetId();
    Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);
    pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetId);
    addEmptyData(pickIntent);
    startActivityForResult(pickIntent,REQUEST_PICK_APPWIDGET);
}
// For some reason you have to add this empty data,else it won't work
public void addEmptyData(Intent pickIntent)
{
    ArrayList<AppWidgetProviderInfo> customInfo = 
        new ArrayList<AppWidgetProviderInfo>();
    pickIntent.putParcelableArrayListExtra(
        AppWidgetManager.EXTRA_CUSTOM_INFO,customInfo);
    ArrayList<Bundle> customExtras = new ArrayList<Bundle>();
    pickIntent.putParcelableArrayListExtra(
        AppWidgetManager.EXTRA_CUSTOM_EXTRAS,customExtras);
};
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
    if (resultCode == RESULT_OK ) {
        if (requestCode == REQUEST_PICK_APPWIDGET) {
            configureWidget(data);
        }
        else if (requestCode == REQUEST_CREATE_APPWIDGET) {
            createWidget(data);
        }
    }
    else if (resultCode == RESULT_CANCELED && data != null) {
        int appWidgetId = 
            data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,-1);
        if (appWidgetId != -1) {
            appWidgetHost.deleteAppWidgetId(appWidgetId);
        }
    }
}
// Show configuration activity of the widget picked by the user
private void configureWidget(Intent data) {
    Bundle extras = data.getExtras();
    int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,-1);
    AppWidgetProviderInfo appWidgetInfo = 
            appWidgetManager.getAppWidgetInfo(appWidgetId);
    if (appWidgetInfo.configure != null) {
        Intent intent = 
            new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);
        intent.setComponent(appWidgetInfo.configure);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetId);
        startActivityForResult(intent,REQUEST_CREATE_APPWIDGET);
    } else {
        createWidget(data);
    }
}
// Get an instance of the selected widget as a AppWidgetHostView
public void createWidget(Intent data) {
    Bundle extras = data.getExtras();
    int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,-1);
    AppWidgetProviderInfo appWidgetInfo = appWidgetManager.getAppWidgetInfo(appWidgetId);
    AppWidgetHostView hostView = appWidgetHost.createView(this,appWidgetId,appWidgetInfo);
    hostView.setAppWidget(appWidgetId,appWidgetInfo);
    // Add  it on the layout you want
    myLayout.addView(hostView);
}
// Call this when you want to remove one from your layout
public void removeWidget(AppWidgetHostView hostView) {
    appWidgetHost.deleteAppWidgetId(hostView.getAppWidgetId());
    // Remove from your layout
    myLayout.removeView(hostView);
}
@Override
protected void onStart() {
    super.onStart();
    appWidgetManager = AppWidgetManager.getInstance(this);
    appWidgetHost = new AppWidgetHost(this,APPWIDGET_HOST_ID);
    // Start listening to pending intents from the widgets
    appWidgetHost.startListening();
}
@Override
protected void onStop() {
    super.onStop();
    appWidgetHost.stopListening();
}您只需要在安装在设备上的AppWidget列表中进行选择即可调用selectWidget()方法. 这个代码是一个修改版的股票Android发射器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
