0

我想制作一个能够拨打号码的小部件应用程序,用户可以在他第一次使用小部件配置将小部件拖放到主屏幕时设置号码。但是当手机重新启动小部件时,它再次使用默认号码。我决定将输入的电话号码保存到共享首选项以保存和加载用户的电话号码,但 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);

        }
    }
}
4

2 回答 2

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);

        }
    }
}

请尝试一下。

于 2013-07-31T09:52:48.817 回答
0

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

在 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);

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

于 2013-07-31T10:10:48.540 回答