实现方法:
其实就是在service中启动一个透明的activity,然后 input 事件,然后finish 了界面。
service 的启动界面
@Override
public IBinder onBind(final Intent intent) {
Log.i("service onBind");
return new IMyAidlInterface.Stub() {
@Overrid
public void test() throws RemoteException {
Intent intent = new Intent();
intent.setComponent(new ComponentName(ServiceStart.this.getPackageName(), TestActivity.class.getName()));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK );
startActivity(intent);
}
};
}
Intent.FLAG_ACTIVITY_NEW_TASK 与 Intent.FLAG_ACTIVITY_MULTIPLE_TASK 结合,才会在新的task 中启动activity
TestActivity的操作为:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
try {
//service 可以将key传入,进行命令的运行。
Runtime.getRuntime().exec("input keyevent 87");
} catch (IOException e) {
e.printStackTrace();
}
}
//及时finish了activity, 最好加上超时机制
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.i("hecheng onKeyDown: " + keyCode);
if(keyCode == 87){
finish();
}
return super.onKeyDown(keyCode, event);
}
透明的activity, theme 相关:
<activity android:name=".TestActivity"
android:excludeFromRecents="false"
android:theme="@style/TranslucentTheme"
>
</activity>
theme.xml
<resources>
<style name="TranslucentTheme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
</resources>