2013-01-12 2 views
2

기기의 CPU 사용량, 배터리 충전량 및 남은 RAM을 표시하는 앱용 위젯을 만들려고합니다. 저장 공간이 아닙니다.Android 위젯 : RAM 표시

CPU 수준과 배터리 충전 코드는 정상적으로 작동합니다. 그러나 RAM 코드는 그렇지 않습니다. AppWidgetProvider에서 .getSystemService()를 사용하려면 액티비티의 컨텍스트를 여기에 전달해야한다는 것을 읽었습니다.

import com.example.myfirstappex.MainActivity; 

    public class AppWidget extends AppWidgetProvider { 
    ... 
    public long getRam() 
{ 

    MemoryInfo mi = new MemoryInfo(); 

    Context mainCon = MainActivity.getAppContext(); 
    ActivityManager activityManager = (ActivityManager)mainCon.getSystemService(Context.ACTIVITY_SERVICE); 

    activityManager.getMemoryInfo(mi); 


    long availableMegs = mi.availMem/1048576L; 

    //Returning the value 
    return(availableMegs); 

} 
    ... 
    } 

하나를 :

01-11 21:29:21.468: E/AndroidRuntime(30759): java.lang.RuntimeException: Unable to instantiate receiver com.example.myfirstappex.AppWidget: java.lang.NullPointerException 

나는이 코드 블록에 문제를 좁혀 : 방법이 ActivityManager와 시스템 서비스를 설정하려고 할 때

문제는 그것을 던져이다 이 문제를 해결하는 방법에 대한 아이디어? 아니면 위젯에 RAM을 표시하고 표시하는 대신에?

편집 : 전체 오류 로그는 다음과 같습니다 주요 응용 프로그램이 실행되지 않을 때

01-11 22:21:32.426: E/AndroidRuntime(32059): FATAL EXCEPTION: main 
    01-11 22:21:32.426: E/AndroidRuntime(32059): java.lang.RuntimeException: Unable to start receiver com.example.myfirstappex.AppWidget: java.lang.NullPointerException 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2383) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at android.app.ActivityThread.access$1500(ActivityThread.java:141) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at android.os.Handler.dispatchMessage(Handler.java:99) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at android.os.Looper.loop(Looper.java:137) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at android.app.ActivityThread.main(ActivityThread.java:5039) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at java.lang.reflect.Method.invokeNative(Native Method) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at java.lang.reflect.Method.invoke(Method.java:511) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at dalvik.system.NativeStart.main(Native Method) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): Caused by: java.lang.NullPointerException 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at com.example.myfirstappex.AppWidget.getRam(AppWidget.java:82) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at com.example.myfirstappex.AppWidget.onUpdate(AppWidget.java:35) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at android.appwidget.AppWidgetProvider.onReceive(AppWidgetProvider.java:66) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2376) 

    01-11 22:21:32.426: E/AndroidRuntime(32059): ... 10 more 

에만 발생합니다.

+0

전체 로그를 게시 할 수 있습니까? 모든 빨간 물건. – Eric

+0

로그를 추가했습니다. – ADiabeticBadger

답변

0

오류 로그에 따르면 문제는 AppWidget.java의 82 행에 있습니다. 직감에 따라, 나는 그것이 ActivityManager activityManager = ...라고 생각한다. 그러나, 그것이 82 행이 아니라면, 그 대신에보세요.

그건 그렇고, 내가 옳다면 다른 곳에서 컨텍스트를 얻어야합니다. 다음 방법은 AppWidget 클래스의 부분들입니다 : 당신이 getRam()를 호출 할 때

onDeleted(Context context, int[] appWidgetIds) 
onDisabled(Context context) 
onEnabled(Context context) 
onReceive(Context context, Intent intent) 
onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) 

, 당신은 그것을 당신이 현재 사용하고있는 어떤 방법에서 Context 개체를 전달해야한다; 이 경우는 onUpdate()입니다. 그런 다음 getRam()을 수정하여 다음을 사용하십시오.

public long getRam(Context context) { 
    // ... 
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    // ... 
} 
+0

효과가있었습니다! 고맙습니다. 그래서 내 주 활동에서 하나를 사용하여 잘못된 컨텍스트를 사용하고 애플 리케이션 위젯 아니 었어? – ADiabeticBadger

+0

@ADiabeticBadger 수정하십시오. 앞에서 말했듯이, 앱이 종료 될 때 컨텍스트가 없기 때문에 앱이 실행되지 않는 경우가 발생했습니다. – Eric

+0

알겠습니다. 도와 주셔서 감사합니다. 나는 당신의 포스트를 upvote 하겠지만 나는 충분히 높은 평판을 가지고 있지 않다. – ADiabeticBadger