2011-10-28 3 views
0

android에서 현재 실행중인 활동의 컨텍스트를 가져 오는 방법이 있는지 궁금합니다. 예를 들어, 활동 클래스가 있고 실행 중입니다. 내가 원하는 것은 Activity 클래스에서 호출 한 일부 함수를 실행하기 위해 다른 Simple 클래스를 호출하는 것이다. 이렇게함으로써, 나는 단순한 클래스에 Activity Class의 문맥을 설정할 필요가있다; 다른 방법으로, 현재 실행중인 활동의 컨텍스트가 있어야합니다. 따라서 실제 클래스가 현재 실행중인 활동에서 호출 된 함수를 실행할 수 있습니다.현재 실행중인 활동의 컨텍스트 가져 오기

다음은 내 프로젝트의 소프트 코드입니다.

public class Main1 extends Activity { 
    private static GetAPNsInfo getAPNsInfo = new GetAPNsInfo(); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
       getAPNsInfo.doSomething(); 
    } 
} 

public class GetAPNsInfo { 
    public void doSomething() { 
     Button button = currentRunningActivityContext.findViewById(R.id.button1); 
     button.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
      } 
     }); 
    } 
} 

마지막으로,이 스레드의 목적은 현재 실행중인 활동 정보를 얻는 좋은 방법이 필요하다는 것입니다.

이것은 내 자신을 발견 한 해결책입니다. 그러나이 경우를 완전히 해결하지는 못합니다. Manifest.xml에 리시버를 추가 할 수 있습니다. 그러면 백그라운드 응용 프로그램이 실행됩니다. 이 같은

<receiver android:name=".RunningActivityCapture"> 
     <intent-filter android:priority="-1"> 
      <action android:name="android.intent.action.NEW_OUTGOING_CALL"></action> 
     </intent-filter> 

    </receiver> 

배경 응용 프로그램 인터페이스의 모양을

public class RunningActivityCapture extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context aContext, Intent intent) { 
     String action = intent.getAction(); 

     if (action.equals(Intent.ACTION_ALL_APPS)) { 
      Activity activty = intent.getCurrentActivity(); 
      Session session = new Session(); 
      session.setRunningActivity(activty); 
     } 
     return; 
    } 
} 

나는 단지 내 배경 응용 프로그램에서 설정 세션 클래스에서 활동을 얻는다. 이 문제를 해결하기위한 첫 번째 아이디어입니다. 그러나 코드가 올바르지 않습니다. 그래서 네 도움이 필요해.

답변

3

도우미 클래스에서이 MainActivity을 사용하는 방법을 묻는 경우 활동 인 컨텍스트이므로 활동 자체를 클래스에 전달할 수 있습니다. 따라서 생성자는 다음과 같습니다.

public GetAPNsInfo(Context context) { 
    ... 
} 

필드에 컨텍스트를 저장하고 나중에 사용합니다. 응용 프로그램에서 어떤 활동에 대한 컨텍스트를 가져 오는 방법을 요구하는 경우가

private static GetAPNsInfo getAPNsInfo = new GetAPNsInfo(this); 

으로 초기화합니다, 그 권장 생각하지 않습니다.

+0

내가 필요한 것은 아닙니다. 이미 스레드에 최종 목적을 추가했습니다. 내가 원하는 것은 현재 실행중인 활동 정보를 얻는 것입니다. 수백 개의 작업에 100 개의 작업이있는 경우 동일한 작업을 실행하므로 각 작업에 대해 Context를 설정해야합니까? 이렇게하면 큰 일이 될 것입니다. – user964409

+0

아마 내 응용 프로그램에서 모든 활동을 얻으려고하지 않는 것이 좋습니다. 그러나 단 하나의 최고 운영 활동을 얻는 방법이 있어야합니다. 이 문제를 해결하기 위해 수신기를 사용할 수 있습니까? – user964409

+0

무엇을하려고합니까? 아마도 더 좋은 방법이있을 것입니다. – Craigy

관련 문제