안드로이드 개발 질문/답변
(글 수 45,052)
아래와 같이 위젯을 만들때에도 Context라는 구문이 상당히 많이 쓰이는데요,
Context를 왜 쓰며, 어떻게 쓰이는 것인지 궁금합니다.
대충 필요하다는 것정도만 알고 있는데, 자세히 모르고 쓰니까 너무 찝찝하네요 ㅠㅠ
Context에 대해서 아시는분 계시면 공부하는 방법이라던가, 공부할 때 쓸 책이라던가, 사이트좀
가르쳐 주셧으면 너무 감사하겠습니다. ^^
class SoundEditWidget extends EditText{
SoundPool mPool = null;
int mClick;
public SoundEditWidget(Context context){
super(context);
init(context);
}
public SoundEditWidget(Context context, AttributeSet attrs){
super(context, attrs);
init(context);
}
public SoundEditWidget(Context context, AttributeSet attrs, int defStyle){
super(context, attrs, defStyle);
init(context);
}
void init(Context context){
mPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
mClick = mPool.load(context, R.raw.click, 1);
}
protected void onTextChanged(CharSequence text, int start, int before, int after){
if(mPool != null){
mPool.play(mClick, 1, 1, 0, 0, 1);
}
}
}
Context를 왜 쓰며, 어떻게 쓰이는 것인지 궁금합니다.
대충 필요하다는 것정도만 알고 있는데, 자세히 모르고 쓰니까 너무 찝찝하네요 ㅠㅠ
Context에 대해서 아시는분 계시면 공부하는 방법이라던가, 공부할 때 쓸 책이라던가, 사이트좀
가르쳐 주셧으면 너무 감사하겠습니다. ^^
class SoundEditWidget extends EditText{
SoundPool mPool = null;
int mClick;
public SoundEditWidget(Context context){
super(context);
init(context);
}
public SoundEditWidget(Context context, AttributeSet attrs){
super(context, attrs);
init(context);
}
public SoundEditWidget(Context context, AttributeSet attrs, int defStyle){
super(context, attrs, defStyle);
init(context);
}
void init(Context context){
mPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
mClick = mPool.load(context, R.raw.click, 1);
}
protected void onTextChanged(CharSequence text, int start, int before, int after){
if(mPool != null){
mPool.play(mClick, 1, 1, 0, 0, 1);
}
}
}
2010.06.21 01:55:49
package android.content;
public abstract class Context
{
public Context() { throw new RuntimeException("Stub!"); }
public abstract android.content.res.AssetManager getAssets();
public abstract android.content.res.Resources getResources();
public abstract android.content.pm.PackageManager getPackageManager();
public abstract android.content.ContentResolver getContentResolver();
public abstract android.os.Looper getMainLooper();
public abstract android.content.Context getApplicationContext();
public final java.lang.CharSequence getText(int resId) { throw new RuntimeException("Stub!"); }
public final java.lang.String getString(int resId) { throw new RuntimeException("Stub!"); }
public final java.lang.String getString(int resId, java.lang.Object... formatArgs) { throw new RuntimeException("Stub!"); }
public abstract void setTheme(int resid);
public abstract android.content.res.Resources.Theme getTheme();
public final android.content.res.TypedArray obtainStyledAttributes(int[] attrs) { throw new RuntimeException("Stub!"); }
public final android.content.res.TypedArray obtainStyledAttributes(int resid, int[] attrs) throws android.content.res.Resources.NotFoundException { throw new RuntimeException("Stub!"); }
public final android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet set, int[] attrs) { throw new RuntimeException("Stub!"); }
public final android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) { throw new RuntimeException("Stub!"); }
public abstract java.lang.ClassLoader getClassLoader();
public abstract java.lang.String getPackageName();
public abstract android.content.pm.ApplicationInfo getApplicationInfo();
public abstract android.content.SharedPreferences getSharedPreferences(java.lang.String name, int mode);
public abstract java.io.FileInputStream openFileInput(java.lang.String name) throws java.io.FileNotFoundException;
public abstract java.io.FileOutputStream openFileOutput(java.lang.String name, int mode) throws java.io.FileNotFoundException;
public abstract boolean deleteFile(java.lang.String name);
public abstract java.io.File getFileStreamPath(java.lang.String name);
public abstract java.io.File getFilesDir();
public abstract java.io.File getCacheDir();
public abstract java.lang.String[] fileList();
public abstract java.io.File getDir(java.lang.String name, int mode);
public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String name, int mode, android.database.sqlite.SQLiteDatabase.CursorFactory factory);
public abstract boolean deleteDatabase(java.lang.String name);
public abstract java.io.File getDatabasePath(java.lang.String name);
public abstract java.lang.String[] databaseList();
public abstract android.graphics.drawable.Drawable getWallpaper();
public abstract android.graphics.drawable.Drawable peekWallpaper();
public abstract int getWallpaperDesiredMinimumWidth();
public abstract int getWallpaperDesiredMinimumHeight();
public abstract void setWallpaper(android.graphics.Bitmap bitmap) throws java.io.IOException;
public abstract void setWallpaper(java.io.InputStream data) throws java.io.IOException;
public abstract void clearWallpaper() throws java.io.IOException;
public abstract void startActivity(android.content.Intent intent);
public abstract void sendBroadcast(android.content.Intent intent);
public abstract void sendBroadcast(android.content.Intent intent, java.lang.String receiverPermission);
public abstract void sendOrderedBroadcast(android.content.Intent intent, java.lang.String receiverPermission);
public abstract void sendOrderedBroadcast(android.content.Intent intent, java.lang.String receiverPermission, android.content.BroadcastReceiver resultReceiver, android.os.Handler scheduler, int initialCode, java.lang.String initialData, android.os.Bundle initialExtras);
public abstract void sendStickyBroadcast(android.content.Intent intent);
public abstract void removeStickyBroadcast(android.content.Intent intent);
public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver receiver, android.content.IntentFilter filter);
public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver receiver, android.content.IntentFilter filter, java.lang.String broadcastPermission, android.os.Handler scheduler);
public abstract void unregisterReceiver(android.content.BroadcastReceiver receiver);
public abstract android.content.ComponentName startService(android.content.Intent service);
public abstract boolean stopService(android.content.Intent service);
public abstract boolean bindService(android.content.Intent service, android.content.ServiceConnection conn, int flags);
public abstract void unbindService(android.content.ServiceConnection conn);
public abstract boolean startInstrumentation(android.content.ComponentName className, java.lang.String profileFile, android.os.Bundle arguments);
public abstract java.lang.Object getSystemService(java.lang.String name);
public abstract int checkPermission(java.lang.String permission, int pid, int uid);
public abstract int checkCallingPermission(java.lang.String permission);
public abstract int checkCallingOrSelfPermission(java.lang.String permission);
public abstract void enforcePermission(java.lang.String permission, int pid, int uid, java.lang.String message);
public abstract void enforceCallingPermission(java.lang.String permission, java.lang.String message);
public abstract void enforceCallingOrSelfPermission(java.lang.String permission, java.lang.String message);
public abstract void grantUriPermission(java.lang.String toPackage, android.net.Uri uri, int modeFlags);
public abstract void revokeUriPermission(android.net.Uri uri, int modeFlags);
public abstract int checkUriPermission(android.net.Uri uri, int pid, int uid, int modeFlags);
public abstract int checkCallingUriPermission(android.net.Uri uri, int modeFlags);
public abstract int checkCallingOrSelfUriPermission(android.net.Uri uri, int modeFlags);
public abstract int checkUriPermission(android.net.Uri uri, java.lang.String readPermission, java.lang.String writePermission, int pid, int uid, int modeFlags);
public abstract void enforceUriPermission(android.net.Uri uri, int pid, int uid, int modeFlags, java.lang.String message);
public abstract void enforceCallingUriPermission(android.net.Uri uri, int modeFlags, java.lang.String message);
public abstract void enforceCallingOrSelfUriPermission(android.net.Uri uri, int modeFlags, java.lang.String message);
public abstract void enforceUriPermission(android.net.Uri uri, java.lang.String readPermission, java.lang.String writePermission, int pid, int uid, int modeFlags, java.lang.String message);
public abstract android.content.Context createPackageContext(java.lang.String packageName, int flags) throws android.content.pm.PackageManager.NameNotFoundException;
public boolean isRestricted() { throw new RuntimeException("Stub!"); }
public static final int MODE_PRIVATE = 0;
public static final int MODE_WORLD_READABLE = 1;
public static final int MODE_WORLD_WRITEABLE = 2;
public static final int MODE_APPEND = 32768;
public static final int BIND_AUTO_CREATE = 1;
public static final int BIND_DEBUG_UNBIND = 2;
public static final java.lang.String POWER_SERVICE = "power";
public static final java.lang.String WINDOW_SERVICE = "window";
public static final java.lang.String LAYOUT_INFLATER_SERVICE = "layout_inflater";
public static final java.lang.String ACTIVITY_SERVICE = "activity";
public static final java.lang.String ALARM_SERVICE = "alarm";
public static final java.lang.String NOTIFICATION_SERVICE = "notification";
public static final java.lang.String ACCESSIBILITY_SERVICE = "accessibility";
public static final java.lang.String KEYGUARD_SERVICE = "keyguard";
public static final java.lang.String LOCATION_SERVICE = "location";
public static final java.lang.String SEARCH_SERVICE = "search";
public static final java.lang.String SENSOR_SERVICE = "sensor";
public static final java.lang.String WALLPAPER_SERVICE = "wallpaper";
public static final java.lang.String VIBRATOR_SERVICE = "vibrator";
public static final java.lang.String CONNECTIVITY_SERVICE = "connectivity";
public static final java.lang.String WIFI_SERVICE = "wifi";
public static final java.lang.String AUDIO_SERVICE = "audio";
public static final java.lang.String TELEPHONY_SERVICE = "phone";
public static final java.lang.String CLIPBOARD_SERVICE = "clipboard";
public static final java.lang.String INPUT_METHOD_SERVICE = "input_method";
public static final int CONTEXT_INCLUDE_CODE = 1;
public static final int CONTEXT_IGNORE_SECURITY = 2;
public static final int CONTEXT_RESTRICTED = 4;
}
2010.06.21 02:08:39
이런 카피&페이스트 댓글을 저도 싫어하지만 .. 사람들에게 Context 를 설명할때는 쉽지 않음을 느낍니다.
이해 바랍니다.^^;;
위에 개념없이 복사해서 붙인 글은 Context의 추상클래스로
안드로이드 전체 소스에서 Context.java 를 찾아보면
파일이 2개 있습니다.
하나는 추상, 하나는 실제 정의된 클래스.
Context를 따로 어떤 어떤 의미라는 것보다
미리 정의된 메서드를 호출할 수 있도록 잘 만들어진 접근 클래스로 이해하시는게 적당할 것 같습니다.
우리가 자주 애용(?)하는 다음의 메서드도 미리 정의되어 있어서 쉽고 간편하게 쓰는것이죠^^
startActivity(android.content.Intent intent);
sendBroadcast(android.content.Intent intent);
아래와 같이 한줄로 답변이 가능한지는 잘 모르겠네요.
Context 는 그냥 다른 클래스나 메서드등을 접근하기 쉽게 미리 정의해놓은 도구라고 생각하시는게 좋을 것 같습니다.