다음은 사용과 관련하여 찾은 내용입니다 context
.
1) . 내에서 Activity
자체 사용 this
위젯을 인스턴스화, 상황에 맞는 메뉴를 등록, 레이아웃 및 메뉴를 팽창에 대한이, 다른 활동을 시작, 새로운 만들 Intent
내에서 Activity
,에서 사용할 수있는 인스턴스 환경 설정, 또는 다른 방법을 Activity
.
레이아웃을 부 풀리십시오 :
View mView = this.getLayoutInflater().inflate(R.layout.myLayout, myViewGroup);
팽창 메뉴 :
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
this.getMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
상황에 맞는 메뉴 등록 :
this.registerForContextMenu(myView);
위젯 인스턴스화 :
TextView myTextView = (TextView) this.findViewById(R.id.myTextView);
시작 Activity
:
Intent mIntent = new Intent(this, MyActivity.class);
this.startActivity(mIntent);
환경 설정 인스턴스화 :
SharedPreferences mSharedPreferences = this.getPreferenceManager().getSharedPreferences();
2). 응용 프로그램 전체 클래스 getApplicationContext()
의 경우 응용 프로그램 수명 동안이 컨텍스트가 존재하므로 사용하십시오.
현재 Android 패키지의 이름을 검색하십시오.
public class MyApplication extends Application {
public static String getPackageName() {
String packageName = null;
try {
PackageInfo mPackageInfo = getApplicationContext().getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), 0);
packageName = mPackageInfo.packageName;
} catch (NameNotFoundException e) {
// Log error here.
}
return packageName;
}
}
응용 프로그램 전체 클래스를 바인딩하십시오.
Intent mIntent = new Intent(this, MyPersistent.class);
MyServiceConnection mServiceConnection = new MyServiceConnection();
if (mServiceConnection != null) {
getApplicationContext().bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
삼) . 리스너 및 기타 유형의 Android 클래스 (예 : ContentObserver)의 경우 다음과 같은 컨텍스트 대체를 사용하십시오.
mContext = this; // Example 1
mContext = context; // Example 2
경우 this
또는 context
클래스 (활동 등)의 맥락이다.
Activity
컨텍스트 대체 :
public class MyActivity extends Activity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
}
}
리스너 컨텍스트 대체 :
public class MyLocationListener implements LocationListener {
private Context mContext;
public MyLocationListener(Context context) {
mContext = context;
}
}
ContentObserver
컨텍스트 대체 :
public class MyContentObserver extends ContentObserver {
private Context mContext;
public MyContentObserver(Handler handler, Context context) {
super(handler);
mContext = context;
}
}
4). 들어 BroadcastReceiver
(인라인 / 내장 수신기 포함), 수신기 자신의 컨텍스트를 사용합니다.
외부 BroadcastReceiver
:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(Intent.ACTION_SCREEN_OFF)) {
sendReceiverAction(context, true);
}
private static void sendReceiverAction(Context context, boolean state) {
Intent mIntent = new Intent(context.getClass().getName() + "." + context.getString(R.string.receiver_action));
mIntent.putExtra("extra", state);
context.sendBroadcast(mIntent, null);
}
}
}
인라인 / 임베디드 BroadcastReceiver
:
public class MyActivity extends Activity {
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final boolean connected = intent.getBooleanExtra(context.getString(R.string.connected), false);
if (connected) {
// Do something.
}
}
};
}
5). 서비스의 경우 서비스 자체 컨텍스트를 사용하십시오.
public class MyService extends Service {
private BroadcastReceiver mBroadcastReceiver;
@Override
public void onCreate() {
super.onCreate();
registerReceiver();
}
private void registerReceiver() {
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(Intent.ACTION_SCREEN_OFF);
this.mBroadcastReceiver = new MyBroadcastReceiver();
this.registerReceiver(this.mBroadcastReceiver, mIntentFilter);
}
}
6). 토스트의 경우 일반적으로을 사용 getApplicationContext()
하지만 가능한 경우 활동, 서비스 등에서 전달 된 컨텍스트를 사용하십시오.
응용 프로그램의 컨텍스트를 사용하십시오.
Toast mToast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG);
mToast.show();
소스에서 전달 된 컨텍스트를 사용하십시오.
public static void showLongToast(Context context, String message) {
if (context != null && message != null) {
Toast mToast = Toast.makeText(context, message, Toast.LENGTH_LONG);
mToast.show();
}
}
마지막 getBaseContext()
으로 Android의 프레임 워크 개발자가 조언 한대로 사용하지 마십시오 .
업데이트 :Context
사용 예를 추가하십시오 .