2012-10-23 75 views
0

我正在開發一個接收SMS消息並在應用程序內部使用此數據的android應用程序。因爲我想要的短信廣播接收器關閉時,我關閉應用程序,我已經把它的主要活動中:Android:無法實例化接收器

public class App extends Activity { 
public class SmsReceiver extends BroadcastReceiver { 
    ... 
} 
... 
} 

它在清單中增加:

<receiver android:name=".App.SmsReceiver" > 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

活動運行正常,直到我收到一條短信。然後我得到以下錯誤:

10-23 15:01:50.019: E/AndroidRuntime(10161): java.lang.RuntimeException: Unable to instantiate receiver be.allys.msgwall.app.App.SmsReceiver: java.lang.ClassNotFoundException: be.allys.msgwall.app.App.SmsReceiver in loader dalvik.system.PathClassLoader[/data/app/be.allys.msgwall.app-1.apk] 

這是因爲接收器類在另一個類內?這對我來說似乎是一個可能的原因,如果不是因爲StackOverflow上的另一篇帖子建議我這樣做。

如果這不是原因,那麼是什麼?任何幫助將不勝感激。

+0

您是否嘗試過寫完整路徑到SmsReceiver? – Yahor10

+0

@Neko我的答案能解決您的問題嗎?如果是,請承認。 – dreamtale

+0

@dreamtale我在工作後接受了你的回答。對不起,沒有留下一條消息。 – Neko

回答

3

當您在清單中註冊一個類間的接收者時,您應該在清單中聲明這樣的接收者名稱,如OuterClass $ interClass

<receiver android:name=".App$SmsReceiver" > 
    <intent-filter> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

編輯1:你應該動態地註冊的接收器,所以你需要有兩個方法,如下面的代碼片段,然後你可以調用registerSMSReceiver的onResume活動,並在的onPause調用unRegisterSMSReceiver 。這將解決您的問題。

private void registerSMSReceiver() 
{ 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 
    registerReceiver(receiver, filter); 
} 

private void unRegisterSMSReceiver() 
{ 
    unregisterReceiver(receiver); 
} 
+0

這並不會使錯誤消失。任何其他想法......? – Neko

+0

@Neko將接收器設置爲靜態類並再次嘗試。 – dreamtale

+0

這有效,但留下了我以前遇到的同樣的問題。每當活動關閉時,我都希望BroadcastReceiver關閉,這樣,只要收到短信,它就不會激活我的應用程序。 – Neko

相關問題