2012-01-11 82 views
0

我有在我的應用上使用飛行模式的煩惱。當我嘗試我的apk時,該應用在我的模擬器上運行得非常好,但在我的真實手機中卻不能運行。在Android上使用飛行模式時遇到的麻煩

這裏是激活飛機代碼:

Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 1); 
     // Post an intent to reload 
     Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); 
     // send a broadcast 
     //intent.putExtra("state", !isEnabled); 
     intent.putExtra("state", true); 
     sendBroadcast(intent); 

要desactivate它:

Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0); 
     // Post an intent to reload 
     Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); 
     // send a broadcast 
     intent.putExtra("state", false); 
     sendBroadcast(intent); 

我讀,我不能創建的意圖(android doc),但我看到的人,可以使飛機模式,所以我不明白!

感謝幫助我!

+0

你有清單中的<使用權限android:name =「android.permission.WRITE_SETTINGS」/>「嗎? – Vladimir 2012-01-11 13:43:22

+0

@Vlad:謝謝。是的,我已經把這條線放在了清單上;-)感謝您的關注! – clement 2012-01-11 15:39:13

+0

@clement請解釋你的總體目標是什麼,給我們一個更大的圖景。我不能說「我不能做這個」。你是什​​麼意思「這個」? – JoxTraex 2012-01-18 07:27:40

回答

0

正如你所說,答案是在文檔中:

「這是一個只能由系統發送一個受保護的意圖。」

Intent Documentation Reference

它可以在模擬器上工作,因爲模擬器是不是安全的設備,讓你做的事情(比如瀏覽文件系統),你會不會通常能夠做到。此外,您沒有提及您嘗試使用的Android的API級別。如果它是最新的,谷歌可能已經收緊了這個限制。

+0

因此,我可以把無聲模式,停止數據連接(3G和WiFi)?我可以執行此操作嗎? 謝謝 – clement 2012-01-18 07:44:11

+0

如果你只是想禁用wifi和3G,這已被回答此前爲WiFi(http://stackoverflow.com/questions/6197119/is-it-possible-to-disable-wireless-networking-using -the-android-sdk-or-ndk),這裏是3G(http://stackoverflow.com/questions/5337121/how-to-enable-disable-3g-data-service-in-android) – Noctuvigilus 2012-01-18 19:52:33

+0

而對於呼叫/短信? – clement 2012-01-19 06:49:18

2

CAN NOT廣播系統級別的意圖。這是違反Android的標準。

不是試圖發送意圖,你爲什麼不實施一個廣播接收器來監聽那個特定的動作,然後當它發生改變時,讓你的應用程序處理它。這將是一個更好的方法。你不能,也不應該不是期望控制飛機模式,但你的應用程序可以聽,當它被調用。您還可以從系統數據庫中檢索一個屬性,告訴您它是否處於飛行模式。

再次不要專注於試圖控制它,只是處理它。

+0

謝謝,但我不明白我可以用廣播接收機來處理飛機模式,這是不可能的,不是嗎? 取而代之的是在飛機上,我可以關閉數據連接(包括3G和wifi)並將手機置於靜音狀態,或者對靜音模式來說也是同樣的問題? – clement 2012-01-18 07:46:50

+0

你的目標是什麼? – JoxTraex 2012-01-18 08:12:23

+0

@clement你的目標是什麼?爲了讓你更好地縮小範圍,我可以幫助你。 – JoxTraex 2012-01-18 08:21:19

1

作爲合法的Android應用程序,您無法執行任何您正在嘗試執行的操作,包括將手機移入飛行模式,禁用收音機,關閉聲音或任何類型的內容。

想象一下,如果某個用戶覺得您的某個應用程序關閉了您的手機收音機,並且您錯過了通知您已獲得一百萬美元的電話。

所以每個人都試圖去的是,作爲一個應用程序,你不應該期望將手機移動到飛行模式。只有用戶可以做到這一點。

現在,如果用戶更改爲飛行模式,則系統會廣播一個意圖,您的應用程序應該捕獲該廣播意圖並對其執行操作。代理它意味着各種各樣的事情,包括改變你的用戶界面。

即使你找到了一些方法來實現你今天要做的事情,系統可以在沒有警告的情況下改變明天(因爲它是一個內部API/Intent),你的應用程序將不能運行。從技術上講,它可能不會在任何其他設備上運行,除非您握在手中,您知道整個API合同廢話。

+0

但是,在單一應用模式的情況下,使用根設備移動到「飛行模式,禁用收音機,關閉聲音或任何類型的東西」非常重要。沒有辦法做到這一點? – ransh 2016-05-22 15:45:38

0
public static void setWifiOn(Context context) { 
     WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    manager.setWifiEnabled(true); 
    } 

    public static boolean getAirplaneMode(Context context) { 
     try { 
     int airplaneModeSetting = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON); 
     return airplaneModeSetting==1?true:false; 
    } catch (SettingNotFoundException e) { 
     return false; 
    } 
    }