2012-05-28 2 views
0

BroadCastReceiver를 사용하는 클래스를 사용하는 응용 프로그램을 만들고 있으므로 응용 프로그램을 설치하고 제거 할 때 catch 할 수 있습니다. 의도는 잘 받아 들여지고 onReceive의 코드는 꼭 실행해야합니다. 그러나 문제는 새로운 PackageManger를 인스턴스화하려고 할 때 오류 메시지가 표시된다는 것입니다. 오류 : "PackageManager 유형을 인스턴스화 할 수 없습니다." 나는 모든 변형을 거의 시도해 봤지만 그 효과를 얻지 못했습니다.PackageManager를 인스턴스화 할 수 없습니다.

내 코드 :

package com.my.package; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.net.Uri; 
import android.util.Log; 

public class PackageReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Uri datauri   = intent.getData(); 
     String uri   = datauri.toString(); 
     PackageManager pm = new PackageManager(); 
     //pm.getApplicationInfo(uri); //broken 
     test(datauri);     //works fine 
    }//end method 

    public void test(Uri uri){ 
     Log.d("test", "data: "+uri); 
    }//end method 
}// end class 
+0

보통 스택 트레이스는 몇 줄, 당신은 아마도 몇 가지 의미가있다, 또한 전체 스택 트레이스를 게시 할 수 있습니다 나머지 줄의 정보. – ilomambo

+0

@ilomambo : 답장을 보내 주셔서 감사합니다. 실제로 코드를 실행하는 데 신경 쓰지 않았습니다. imran khan의 솔루션을 사용했는데,이 작품은 – slinden77

답변

1

사용

PackageManager pm= context.getPackageManager(); 
List<ApplicationInfo> applicationInfos = pm.getInstalledApplications(0); 
.... 

대신

PackageManager pm = new PackageManager(); 
+0

덕분에 문제가 해결되었습니다! – slinden77