2014-02-19 4 views
1

부재 중 전화를받을 때마다 자체적으로 업데이트해야하는 위젯을 프로그래밍하고 있습니다. 이를 위해 AppWidgetProvider 클래스의 onEnabled 메서드에서 ContentObserver를 등록합니다.ContentObserver가 LG 장치에서만 호출되지 않습니다.

package bembibre.coolstar.windowsmobilewidget.backend; 

import bembibre.coolstar.windowsmobilewidget.backend.textproviders.CallsProvider; 
import android.content.Context; 
import android.database.ContentObserver; 

public class MissedCallsContentObserver extends ContentObserver 
{ 
    Context context; 

    public MissedCallsContentObserver(Context context) 
    { 
     super(null); 
     this.context = context; 
    } 

    @Override 
    public void onChange(boolean selfChange) 
    { 
     try{ 
      Thread.sleep(1000); 
     } 
     catch(Exception e){ 

     } 
     new CallsProvider(this.context).setData(); 
    } 
} 

의 onChange가 부재 중 전화가 전화가 수신 될 때마다 자동으로 호출되는 방법

@Override 
public void onEnabled(Context context){ 
    this.mcco = new MissedCallsContentObserver(context); 
    context.getContentResolver().registerContentObserver(Calls.CONTENT_URI, true, this.mcco); 
} 

클래스 MissedCallsContentObserver에 대한 코드는 다음과 같다 : 코드는 다음과 같다. 이것은 내가 테스트 한 많은 장치에서 작동합니다. 하지만 LG L5에서도 테스트를 마쳤습니다. 이것은 작동하지 않는 유일한 장치입니다. 왜? ContentObservers는 LG 전자 장치의 Samgung 장치에서 동일하지 않습니다? LG에서는 onChange 메서드가 호출되지 않습니다. 또한 제 일식 디버거에 대한 질문을하고 싶습니다. 내 삼성 전화로 잘 작동하지만 소니 Xperia와 LG가 전에 언급했듯이, 필요할 때 연결이 끊어집니다. Withouth가 아무 일도하지 않으면 디버거가 갑자기 끊어집니다. 내 USB 와이어가 완벽합니다. 또한 컴퓨터와 휴대 전화의 USB 포트. 디버거가 끊기는 이유는 무엇입니까? logcat에 예외 또는 오류 메시지가 표시되지 않습니다. 나는 그 문제가 뭔지 모른다.

+0

삼성과 LG는 프레임 워크 코드를 크게 수정했습니다.이 문제점에 대한 LG 버그 보고서를 확인 했습니까? –

+0

예, 했어요. 나는 아무것도 발견하지 못했다. ContentObserver는 매우 기본적인 Android 메커니즘입니다. 제조업체가 어떻게 변화시킬 수 있는지 이해하지 못합니다. 이것은 LG 휴대폰에서 광산과 같은 많은 애플리케이션이 작동하지 않는다는 것을 의미합니다. 많은 응용 프로그램에는 ContentObservers가 필요합니다. – user3289695

+0

내 문제의 원인은 Handler 인스턴스 대신 null을 전달하는 ContentObserver 생성자를 호출하는 것일 수 있습니다. 그것은 내 코드에서 볼 수있는 유일한 이상한 일입니다. – user3289695

답변

0

내 모든 ContentObserver은 (는) AppWidgetProvider 클래스에 등록되어 등록되지 않았습니다. 나는 이것이 안전하지 않다는 것을 읽고 예를 들면 그것이 작동하지 않는 것 같은 일부 LG 전화에서 읽는다. 내가 만든 것은 끈적이다. Service (오버라이드 된 메소드의 끝에서 onStartCommand())을 반환해야한다. 상수는 START_STICKY이다. 그런 다음 서비스 내에서 ContentObserver을 등록하면 이제 모든 전화기에서 작동합니다. 끈적 거리는 서비스가 영원히 존재하는 것 같습니다. 그렇지 않은 경우, 서비스를 다시 작성하지 않으면 내 응용 프로그램이 작동을 멈 춥니 다.

서비스가 생성되면 ContentObserver을 등록하고 서비스가 삭제되면 등록을 취소합니다. ContentObserver을 더 이상 사용하지 않을 때 등록을 잊어 버리는 것은 위험한 것 같습니다.

관련 문제