2011-11-22 82 views
1

我正在開發一個應用程序,其中wifi狀態在手機狀態爲響鈴時關閉。在RINGING手機狀態下關閉wifi

我的代碼如下:

phonestateManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.phone.state" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-sdk android:minSdkVersion="8" /> 
    <application android:icon="@drawable/ic_launcher" > 
     <activity 
      android:label="@string/app_name" 
      android:name=".PhonestateActivity" > 
      <intent-filter > 
       <action android:name="android.intent.action.MAIN" />  
       <category android:name="android.intent.category.LAUNCHER" />  
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
     </activity>  
     <activity android:name=".WifitoggleActivity" />  
     <receiver android:name=".ServiceReceiver" /> 
    </application>  
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />  
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
    <uses-permission android:name="android.permission.WAKE_LOCK" />  
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
</manifest> 

PhonestateActivity.java

public class PhonestateActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Intent intent = new Intent(PhonestateActivity.this, 
         ServiceReceiver.class); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

ServiceReceiver.java

public class ServiceReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     MyPhoneStateListener phoneListener = new MyPhoneStateListener(); 
     TelephonyManager telephony = (TelephonyManager); 
     context.getSystemService(Context.TELEPHONY_SERVICE); 
     telephony.listen(phoneListener, MyPhoneStateListener.LISTEN_CALL_STATE); 
    } 
} 

MyPhoneStateListener。 java的

public class MyPhoneStateListener extends PhoneStateListener { 
    @SuppressWarnings("unused") 
    private WifitoggleActivity ss; 

    public void onCallStateChanged(int state, String incomingNumber) { 
     switch (state) { 
      case TelephonyManager.CALL_STATE_IDLE: 
      Log.d("DEBUG", "IDLE"); 
      break; 
      case TelephonyManager.CALL_STATE_RINGING: { 
      ss = new WifitoggleActivity(); 
      Log.d("DEBUG", "RINGING"); 
      break; 
      } 
     } 
    } 
} 

WifitoggleActivity.java

public class WifitoggleActivity extends Activity { 
    public WifitoggleActivity() { 
     System.out.print("INSIDE WIFI"); 
    } 

    /** Called when the activity is first created. */ 
    private WifiManager wifiManager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // setContentView(R.layout.main); 
     wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
     if (wifiManager.isWifiEnabled()) { 
      wifiManager.setWifiEnabled(false); 
     } else { 
      wifiManager.setWifiEnabled(true); 
     } 
    } 
} 

的代碼只是FORCE CLOSEing在我的設備。 Manifest文件有問題嗎?

請幫我找到解決辦法。

在此先感謝你們。

+0

如果喲註冊廣播你需要指導然後我們來這裏幫助。沒有人有時間閱讀所有這些代碼。具體的。你是社區的新手,所以記住將來。我也會對你有所幫助。你可以發佈你的日誌貓 – Sameer

+0

確定主席先生。 ........正如你所說,即時通訊新的這個社區....我將發佈我的logcat – subrussn90

+0

張貼您的日誌貓,它將有助於識別錯誤容易 – Sameer

回答

3

ServiceReceiver是BroadcastReceiver而非Activity。您在第一個區塊中使用錯誤的代碼。

查找在代碼中的onClick處理程序:

public class PhonestateActivity extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button button1= (Button)findViewById(R.id.button1); 
     button1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

然後刪除以下兩行:

 Intent intent = new Intent(PhonestateActivity.this,ServiceReceiver.class); 
     startActivity(intent); 

 IntentFilter intentFilter=new IntentFilter(Intent.ACTION_ANSWER); 
     registerReceiver(new ServiceReceiver(),intentFilter); 

替換它們作爲ServiceReceiver不是活動。

編輯

再添加一個權限:

android.permission.PROCESS_OUTGOING_CALLS 

,改變

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

現在刪除兩個行,從onCreate方法 Check this link

+0

雅我改變了,但應用程序直接發送沒有用戶界面的廣播...可以檢查清單文件,如果有任何權限不匹配..... – subrussn90

+1

再次檢查答案。我已編輯 – Sameer