14

I want to use getWindowManager() in my MainActivity, but I don't want to write this method directly in it.

Here is my MainActivity code

public class MainActivity extends Activity {
@Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  String d= new DisplayMessageActivity().getWeithAndHeight(d);
 }

and here is my DisplayMessageActivity code

public class DisplayMessageActivity extends Activity {

@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();
    ....
    ....
    setContentView(textView);
}
public String getWeithAndHeight(String url) {  
    DisplayMetrics dm = new DisplayMetrics();  
    *getWindowManager().getDefaultDisplay().getMetrics(dm);*
    int width = dm.widthPixels;
    int height = dm.heightPixels;  
    String w=new String(""+width);
    String h=new String(""+height);
    url=url+"&23=w%3A"+w+"%20h%3A"+h+"%20d%3A"; 
    return url;
}  
}

my code break at getWindowManager(), please tell me why. Thank you very much.

劉孟儒
  • 173
  • 1
  • 1
  • 7

6 Answers6

32
public String getWeithAndHeight(Context context, String url) {  
    DisplayMetrics dm = new DisplayMetrics();  
    ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
    //....
}   
Boris Mocialov
  • 3,439
  • 2
  • 28
  • 55
  • 2
    It's advisible to take Activity as the first argument instead of a Context that's casted to an Activity. – sapht Jan 11 '17 at 12:44
8

If you are using Kotlin, this code might be helpful to you:

    private fun getDeviceWidthAndHeight() {

        val metrics = DisplayMetrics()
        val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
        windowManager?.defaultDisplay?.getMetrics(metrics)
        viewWidth = metrics.widthPixels
        viewHeight = metrics.heightPixels
    }
Nick
  • 1,393
  • 1
  • 14
  • 22
5

Why don't you create static method:

public static String getWeithAndHeight(Activity activity, String url) {  
    DisplayMetrics dm = new DisplayMetrics();  
    activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
    int width = dm.widthPixels;
    int height = dm.heightPixels;  
    String w=new String(""+width);
    String h=new String(""+height);
    url=url+"&23=w%3A"+w+"%20h%3A"+h+"%20d%3A"; 
    return url;
} 

Your DisplayMessageActivity is not created successuffly. You cannot just create new activity object to use all of its methods.

Tishka17
  • 305
  • 2
  • 12
5

Way too late to the party here, posting the answer as someone might be able to benefit from it. you can get WindowManager()as a static reference using the context like this.

  DisplayMetrics displayMetrics = new DisplayMetrics();
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        if (windowManager != null) {
            windowManager.getDefaultDisplay().getMetrics(displayMetrics);
        }

now you can use display matrix to get width,height etc

Aniruddha K.M
  • 7,361
  • 3
  • 43
  • 52
0

Answer of your first question "I want to use getWindowManager() in my MainActivity, but I don't want to write this method directly in it." You can write BaseActivity extends Activity & here you can define the code for

public String getWeithAndHeight(Context context, String url) {  
    DisplayMetrics dm = new DisplayMetrics();  
    ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
    //....
} 

And for DisplayMessageActivity & MainActivity you can extends with BaseActivity.

chaitanya
  • 1,726
  • 2
  • 17
  • 13
0

Follow two steps: First: extend Activity class

class Example extends Activity

Second: Use these lines

DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager windowmanager = (WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
windowmanager.getDefaultDisplay().getMetrics(displayMetrics);
int deviceWidth = displayMetrics.widthPixels;
int deviceHeight = displayMetrics.heightPixels;
Arbitur
  • 38,684
  • 22
  • 91
  • 128
dgamer
  • 155
  • 2
  • 3