2013-03-04 2 views
0

이이 link방송 수신기는

내가 무엇입니까 불법적 인 접근 예외를 참조한다. 나는 위의 링크에서 주어진 매니페스트에 대한 모든 가능성을 시도했다. 다음과 같이

내 로그 캣 오류는 다음과 같습니다

03-04 16:42:48.105: E/AndroidRuntime(808): FATAL EXCEPTION: main 
03-04 16:42:48.105: E/AndroidRuntime(808): java.lang.RuntimeException: Unable to start receiver com.example.testapp.MainActivity$SmsReceiver: android.content.res.Resources$NotFoundException: String resource ID #0x0 
03-04 16:42:48.105: E/AndroidRuntime(808): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1805) 
03-04 16:42:48.105: E/AndroidRuntime(808): at android.app.ActivityThread.access$2400(ActivityThread.java:117) 
03-04 16:42:48.105: E/AndroidRuntime(808): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:981) 
03-04 16:42:48.105: E/AndroidRuntime(808): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-04 16:42:48.105: E/AndroidRuntime(808): at android.os.Looper.loop(Looper.java:123) 
03-04 16:42:48.105: E/AndroidRuntime(808): at android.app.ActivityThread.main(ActivityThread.java:3683) 
03-04 16:42:48.105: E/AndroidRuntime(808): at java.lang.reflect.Method.invokeNative(Native Method) 
03-04 16:42:48.105: E/AndroidRuntime(808): at java.lang.reflect.Method.invoke(Method.java:507) 
03-04 16:42:48.105: E/AndroidRuntime(808): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
03-04 16:42:48.105: E/AndroidRuntime(808): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
03-04 16:42:48.105: E/AndroidRuntime(808): at dalvik.system.NativeStart.main(Native Method) 
03-04 16:42:48.105: E/AndroidRuntime(808): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0 
03-04 16:42:48.105: E/AndroidRuntime(808): at android.content.res.Resources.getText(Resources.java:201) 
03-04 16:42:48.105: E/AndroidRuntime(808): at android.widget.Toast.makeText(Toast.java:258) 
03-04 16:42:48.105: E/AndroidRuntime(808): at com.example.testapp.MainActivity$SmsReceiver.onReceive(MainActivity.java:39) 
03-04 16:42:48.105: E/AndroidRuntime(808): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1794) 
03-04 16:42:48.105: E/AndroidRuntime(808): ... 10 more 

내 코드 :

public class MainActivity extends Activity { 



     public static class SmsReceiver extends BroadcastReceiver{ 


     int i; 
     String body ; 
     String number ; 
     String no = "15555215554"; 

       @Override 
       public void onReceive(Context context, Intent intent) { 
        // TODO Auto-generated method stub 
        Bundle bundle = intent.getExtras(); 
        SmsMessage[] msgs = null; 
        String str = ""; 
        if (bundle != null) 
        { 
         // Retrieve the SMS. 
         Object[] pdus = (Object[]) bundle.get("pdus"); 
         msgs = new SmsMessage[pdus.length]; 
         for (i=0; i<msgs.length; i++) 
         { 
          Toast.makeText(context, +i, Toast.LENGTH_SHORT).show(); 
          msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 

          if(msgs[i].getOriginatingAddress().equals(no)) 
          { 
           body = msgs[i].getMessageBody(); 
           number = msgs[i].getOriginatingAddress(); 
          str += "SMS from " + msgs[i].getOriginatingAddress(); 
          str += " :"; 
          str += msgs[i].getMessageBody().toString(); 
          str += "\n"; 
          Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 


          } 
         }      

       } 

    } 
    } 





    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
+2

공용이고 정적입니까? –

+0

부모/별도의 클래스로 이동, 내부 클래스가 좋은 생각이 아니 –

+0

그것은 개인 및 정적되었습니다. 나는 public static을 사용하려고 시도했으나 이제는이 오류를'03-04 16 : 35 : 39.065 : E/AndroidRuntime (773) : java.lang.RuntimeException : 수신자를 시작할 수 없습니다 com.example.testapp.MainActivity $ SmsReceiver : android .content.res.Resources $ NotFoundException : String 리소스 ID # 0x0' – newbee

답변

0

업데이트 된 질문에 따라 잘못된 Toast.makeText() 메서드를 사용하는 것이 문제입니다. makeText() n 삭제의 버전을 사용하고

Toast.makeText(context, msgs[i], Toast.LENGTH_SHORT).show(); 

문자열 리소스 ID를 기대하고 다음과 같이

당신은 this one를 사용하고 싶습니다.

+0

감사합니다. 이것은 단지 원치 않는 선이었습니다. 변수 'i'에 문제가 있는지 알 수 있도록 추가했습니다. 나는 그것을 지금 제거하고 그것의 일 벌금. :) – newbee

0

는 이런 종류의 문제를 무시합니다. Receiver 클래스를 내부 클래스로 사용하지 마십시오. 그것을 별도의 클래스로 만들고 매니페스트에 등록하십시오. 적절한 의도로 필터가 목표를 달성 할 것입니다.

+0

내 앱의 기능은 메시지를 받으면 다른 활동을 시작하는 것입니다. 이 부분은 잘 때 내가 별도의 클래스로 내 수신기 클래스를 가지고 SMS를받을 작동합니다. 하지만 내 앱 아이콘을 클릭하고 시작하면 강제 종료 오류가 발생합니다. 그래서 피하기 위해, 나는 중첩 클래스로 수신기 클래스를 가질 수 있고 레이아웃이 부모 클래스의 oncreate 메소드 내에 표시 될 수 있을지 생각하고있었습니다. – newbee

+0

응용 프로그램을 시작할 때 표시하려는 활동이 매니페스트의 실행 프로그램이되고 브로드 캐스트 수신기에서 항상 새로운 활동을 시작할 수 있습니다. –

+0

이 토론은 요점입니다. @newtoandroid가 내부 클래스 선언을 변경하고 나면, 구현시 발생한 버그가 나타납니다. 다른 클래스 또는 공개 정적 내부 클래스로 reveiver가 있으면별로 차이가 없습니다. 클래스가 어떤 오버 헤드로로드되는지에 대한 질문을 제외하고. –

관련 문제