Search code examples
androidsonysony-smartwatch

Set value in ControlExtension in Smartwatch


I have question for receive value in smartwatch. Currently I follow this steps from this question

Actually,the person who ask it has the answer how to do that, but since my reputation for comment is not enough, so I can't ask question by comment in his/her question.

Right now, based on Mr. Eir,the person who answered the question. I have problem in what he answered:

You also want to pass some arguments to your Extension, i.e. the String you mention. This can be a bit tricky; normally, you would pass that String in the Intent itself, as an extra, but here, that is not available. You need to save that information (the String) on a location that your Extension can access as well. So, if your Activity and your Extension are part of the same app, that location can be the app preferences: the Activity saves the value in the preferences, and the Extension reads it from the same preference and displays it on the SmartWatch or whatever.

He said that I can save the value in preference and the Extension reads it from the same preference and displays it on the SmartWatch. Unfortunately, I don't know how the extension reads it. I have try to put the value in samplepreferenceactivity:

@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            SharedPreferences settings = getSharedPreferences("SHARED_PREFS_FILE",0);
            String message = settings.getString("send", "message");

  }

I don't know how to put the value in controlextension class, If it possible to put, I want to you use for changing "Hello watch". Below you can find controlextension class:

public class HelloWatchExtension extends ControlExtension{
   ...
  public HelloWatchExtension(Context context, String hostAppPackageName) {
        super(context, hostAppPackageName);

        width = getSupportedControlWidth(context);
        height = getSupportedControlHeight(context);

        layout = new RelativeLayout(context);
        textView = new TextView(context);
        textView.setText("Hello watch!");
        textView.setTextSize(9);
        textView.setGravity(Gravity.CENTER);
        textView.setTextColor(Color.WHITE);
        textView.layout(0, 0, width, height);
        layout.addView(textView);
    }

Since it is not activity, so it is n't possible to take by using getpreference. Anybody knows how?


Solution

  • "Since it is not activity, so it isn't possible to take by using getpreference. Anybody knows how?"

    You can access the preferences through context:

    context.getApplicationContext().getSharedPreferences(...);
    

    A few pointers about using shared preferences:

    SharedPreferences preferences = _context. getApplicationContext().getSharedPreferences("com.example.AppName", Context. MODE_MULTI_PROCESS);
    

    Putting string in shared preferences:

    _preferences.edit().putString(“OBJECT”, “object_name”).commit();
    

    Retrieving string from shared preferences:

    _preferences.getString(“OBJECT”, "default_name");