手机重启后如何保持小部件配置?

时间:2013-07-31 09:45:16

标签: android android-widget sharedpreferences

我想创建一个能够拨打号码的小部件应用程序,用户可以使用小部件配置将小部件拖放到主屏幕时设置该号码。但是当手机重新启动小部件时再次使用默认号码。我决定将输入的电话号码保存到共享偏好设置以保存和加载用户的电话号码,但是eclipse说在onUpdate中不允许使用getSharedPreferences。还有其他方法可以执行吗?

我该怎么办?

我的代码:

public class Main extends AppWidgetProvider {
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        // TODO Auto-generated method stub
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        for(int i=0 ; i<appWidgetIds.length ; i++)
        {
            SharedPreferences details = getSharedPreferences("OPERATOR", 0);
            int appWidgetId = appWidgetIds[i];
            String phNumber = "5554574";

            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:"+(phNumber)));
            PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);

            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
            views.setOnClickPendingIntent(R.id.button1, pending);

            appWidgetManager.updateAppWidget(appWidgetId, views);

        }
    }
}

2 个答案:

答案 0 :(得分:0)

使用:

SharedPreferences details = context.getSharedPreferences("OPERATOR", 0);

必须从上下文中获取SharedPreferences。 onUpdate(...)为您提供上下文。

您更改的代码应如下所示:

public class Main extends AppWidgetProvider {
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        // TODO Auto-generated method stub
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        for(int i=0 ; i<appWidgetIds.length ; i++)
        {
            SharedPreferences details = context.getSharedPreferences("OPERATOR", 0);
            int appWidgetId = appWidgetIds[i];
            String phNumber = "5554574";

            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:"+(phNumber)));
            PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);

            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
            views.setOnClickPendingIntent(R.id.button1, pending);

            appWidgetManager.updateAppWidget(appWidgetId, views);

        }
    }
}

请试试。

答案 1 :(得分:0)

AppWidgetProvider不是Context。但是你经常可以创建一个静态方法来访问应用程序的上下文,然后执行此操作

在Android Manifest文件中声明如下

<application android:name="com.example.MyApplication">

</application>

然后编写课程

public class MyApplication extends Application{

    private static Context context;

    public void onCreate(){
        super.onCreate();
        MyApplication.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return MyApplication.context;
    }
}

然后你可以使用

        SharedPreferences details = MyApplication.getAppContext().getSharedPreferences("OPERATOR", 0);

我还没有使用过小部件,所以不能保证这个解决方案,但希望它有效!