我正在開發一款將在工業環境中用作手持控制器的Android應用程序。爲了讓平板電腦不太適合帶回家,我試着以編程方式始終打開飛行模式,但在4.2版本中已棄用此版本,這也是我們爲了獲得Android Open Accessory而使用的版本。但是我在想,如果我可以在清單中註冊一個接收器,以便隨時啓動我的應用程序飛行模式被更改,然後檢查它是否關閉並提示用戶重新打開它。清單中的飛機模式接收器?
我已經嘗試了下面的這個解決方案,也發現了作爲this問題的答案。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver android:name=".receiver.ConnectivityReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
我自己也嘗試這樣的代碼:
<receiver android:enabled="true" android:name=".ConnectivityReceiver">
<intent-filter>
<action android:name="android.intent.action.SERVICE_STATE"/>
</intent-filter>
</receiver>
還發現,通過saxos here的aswer。
現在,這些解決方案都不會導致我的應用程序在飛行模式更改時啓動。
是否有可能在清單文件中爲Airplane模式註冊BroadcaseReceiver並讓該應用程序啓動?
編輯1:我確實有在Java代碼中工作的BroadcastReceiver,所以我可以在我的應用程序處於活動狀態時檢測到這種情況。這不是我所期待的。謝謝。
編輯2:這是我整個清單目前文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.i2c"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17"
android:maxSdkVersion="17"/>
<!-- SDK 14 = 4.0 ICS
SDK 17 = 4.2 JB -->
<!-- Assures software is not loaded onto unsupported screen size, i.e. phones -->
<supports-screens android:xlargeScreens="true"
android:largeScreens="true"
android:normalScreens="false"
android:smallScreens="false"
android:anyDensity="true"/>
<uses-feature android:name="android.hardware.usb.accessory"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.i2c.mainActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.AIRPLANE_MODE" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
android:resource="@xml/accessory_filter"/>
</activity>
</application>
的USB_ACCESSORY ATTACHED
和MAIN
發射器的工作就好了,開始我的應用程序從onCreate
點。然而AIRPLANE_MODE
似乎沒有做任何事情。
這裏是我的廣播接收器是在Java代碼中:
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
Log.d("I2CActivity", "onReceive of BroadcastReceiver()");
String action = intent.getAction();
if(ACTION_USB_PERMISSION.equals(action)) {
Log.d("ACTION_USB_PERMISSION", action.toString());
synchronized (this) {
Log.d("syncronized", this.toString());
UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
if(intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if (accessory != null) {
OpenAccessory(accessory);
}
}
else {
Log.d("mUsbReceiver", "permission denied for accessory " + accessory);
}
}
}
else if(UsbManager.ACTION_USB_ACCESSORY_ATTACHED.equals(action)) {
Log.d("ACTION_USB_ACCESSORY_ATTACHED", action.toString());
UsbAccessory accessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
if (accessory != null) {
resumeAccessory();
}
}
else if(UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {
Log.d("ACTION_USB_ACCESSORY_DETACHED", action.toString());
UsbAccessory accessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
if (accessory != null) {
closeAccessory();
}
}
else if(Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) {
Log.e("Airplane Mode", "Airplane mode changed");
airplaneMode = Settings.Global.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
}
}
};
但是從我的理解
這只是註冊的應用程序正在運行的時候,我想那是連註冊的接收器時,應用程序不運行。
yes可能的用途 –
DjHacktorReborn
2013-03-06 15:12:17
@DjHacktorReborn我需要有任何'uses-permission'標籤嗎?謝謝。 – TronicZomB 2013-03-06 15:13:50
nopes你不需要 – DjHacktorReborn 2013-03-06 15:14:34