2017-09-18 41 views
2

我正在編寫一個跟蹤系統更改的服務,意思是說,只要鍵盤變得可見/隱藏,任何應用程序都可以隱藏Android - 處理全局配置更改

要實現以下任務,我建立了一個啓動一個服務小活動

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Intent serviceIntent = new Intent(this, MyService.class); 
     startService(serviceIntent); 

     //setContentView(R.layout.activity_main); 
    } 
} 

的manifest.xml文件本身

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

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <service 
      android:name=".MyService" 
      android:enabled="true" 
      android:exported="true" 
      android:configChanges="orientation|screenSize|keyboardHidden"></service> 
    </application> 

</manifest> 

和服務本身:

public class MyService extends Service { 

    public MyService() { 
    } 

    private static final String TAG = 
      "abbeyservice"; 

    @Override 
    public void onCreate() { 
     Log.d(TAG, "Service onCreate"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     Log.i(TAG, "Service onStartCommand"); 

     return Service.START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     Log.i(TAG, "Service onBind"); 
     return null; 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig);   
    } 

    @Override 
    public void onDestroy() { 
     Log.i(TAG, "Service onDestroy"); 
    } 
} 

問題是我收到通知,並且僅針對我的活動。這被視爲白屏未知的原因(即使我沒有使用SetContentView(..))

+3

*由於未知原因(即使我沒有使用SetContentView(..)* *是*原因 –

+0

android:configChanges'不是''的有效清單屬性。應該已經告訴過你了 –

+0

1.我的白色活動輪換時會收到通知 2.我如何得到有關鍵盤更改的通知? –

回答

1

當你談到「鍵盤」時,你正在談論軟鍵盤。這不會導致配置更改,因爲配置沒有更改。

有一些帶有硬件鍵盤的設備會滑出,因此當它們滑出或重新插入時,它們會生成配置更改事件。還可以將外部鍵盤連接到某些Android設備,連接或斷開硬件鍵盤的操作也會生成配置更改事件。

要檢測你自己的應用程序顯示的鍵盤,看 How to check visibility of software keyboard in Android?

據我所知,有沒有辦法找出是否在另一個應用顯示的軟鍵盤。