2013-12-18 38 views
0

重构我简单的拨号应用和移动我的自定义“ServiceReceiver”类,所以它嵌套在我的主类,像这样(部分代码只显示嵌套ServiceReceiver类)Android的嵌套类和清单文件

public class Main extends Activity implements OnClickListener{ 


    public class ServiceReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(final Context context, Intent intent) { 
      TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
      telephony.listen(new PhoneStateListener(){ 
       @Override 
       public void onCallStateChanged(int state, String incomingNumber) { 
        super.onCallStateChanged(state, incomingNumber); 
        Log.d("foo","incomingNumber : "+incomingNumber); 

        EditText incomingNum = (EditText) findViewById(R.id.inputText); 

        incomingNum.setText(incomingNumber); 

       } 
      },PhoneStateListener.LISTEN_CALL_STATE); 
     } 
    } 

我问题在于,在完成这些之后,需要对manifest.xml进行哪些更改?

这是我的现有(旧)清单文件,当ServiceReceiver在一个单独的文件,类,不嵌套。

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.foo" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="19" 
     android:targetSdkVersion="19" /> 

    <uses-permission android:name="android.permission.CALL_PHONE" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.foo.Main" 
      android:label="@string/title_activity_main" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver android:name=".ServiceReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

回答

0

您是否尝试过这样的事情:

<receiver android:name="com.example.foo.Main$ServiceReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
</receiver> 

,使接收机类静态

+0

当我试图使嵌套ServiceReceiver静态得到错误不能使静态参考非静态方法findViewById类型Activity –

+0

它是否在静态工作? – Manjunath

+0

但是,如果我省略静态,它编译和我得到以下运行时错误:无法实例化接收器,无法实例化;没有空的构造函数 –