打開application details settings
使用 intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
,我該如何強制停止應用程序編程?強制停止android應用程序
回答
有兩種方式,一個更粗魯一個和更好的
好做法
如果運行
的this.finish();
方法將只有一個活動足夠
如果您有多個活動運行
您必須致電this.finishAffinity();
方法。 這是在一般情況下,最好的做法,你可以同時擁有一個或多個活動
粗魯的方式
System.Exit(0);
我加入這個只爲信息,但這可能不能與多個活動的工作這不是關閉應用程序的好方法。它大部分是「保持電源按鈕,直到電腦關機」。
感謝您的回覆,但是我的要求是在打開App信息屏幕後強制關閉應用程序。 –
@VishalChaudhari哦,你的意思是設置中的應用程序信息屏幕?我認爲應用程序內的應用程序信息屏幕對不起 –
在運行時單擊另一個應用程序的元素會被視爲安全威脅。你需要通過黑客才能通過這個障礙。
有一個我最近發現的黑客,你可以使用它。你可以找到源代碼在這裏:https://github.com/tfKamran/android-ui-automator
您可以在這裏爲您的應用程序添加一個模塊的代碼,並調用與動作com.tf.uiautomator.ACTION_CLICK_ITEM
服務,併發送你想點擊作爲一個額外的與關鍵元素的文本itemText
。
您可以使用ADB像測試:
adb shell am startservice -a com.tf.uiautomator.ACTION_CLICK_ITEM -e itemText "OK"
Thnx的答覆。是的,這是解決方案之一,但這隻會在根植設備中起作用。 –
噢,是的,這是一個主要的限制。 –
您可以使用Accessibility
來實現這一(但它需要Accessibility
爲您的應用程序啓用用戶)
public class MyAccessibilityService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
//TYPE_WINDOW_STATE_CHANGED == 32
if (AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED == event
.getEventType()) {
AccessibilityNodeInfo nodeInfo = event.getSource();
if (nodeInfo == null) {
return;
}
List<AccessibilityNodeInfo> list = nodeInfo
.findAccessibilityNodeInfosByViewId("com.android.settings:id/left_button");
//We can find button using button name or button id
for (AccessibilityNodeInfo node : list) {
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
list = nodeInfo
.findAccessibilityNodeInfosByViewId("android:id/button1");
for (AccessibilityNodeInfo node : list) {
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
}
@Override
public void onInterrupt() {
// TODO Auto-generated method stub
}
}
你可以檢查一下在這個例子中: AccessibilityTestService.java
感謝您的回覆,但給出的服務是用來打開應用程序的詳細信息。打開屏幕後,我想以編程方式執行強制關閉操作。 –
看起來像你做錯了:D檢查此:http://stackoverflow.com/questions/26628262/how-to-click-button-in-settings-using-accessibilityservice –
如果你不能找到按鈕id ,你可以通過文本找到它:findAccessibilityNodeInfosByText(「強制停止」) –
我發現一個解決方案爲強制停止。強制停止後,我該如何返回到我的活動頁面?
public class DeviceAccessibilityService extends AccessibilityService {
private static final String TAG = "litan";
private boolean isKilled = false;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
isKilled = false;
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED == event.getEventType()) {
AccessibilityNodeInfo nodeInfo = event.getSource();
Log.i(TAG, "ACC::onAccessibilityEvent: nodeInfo=" + nodeInfo);
if (nodeInfo == null) {
return;
}
List<AccessibilityNodeInfo> list = new ArrayList<>();
if ("com.android.settings.applications.InstalledAppDetailsTop".equals(event.getClassName())) {
if (Build.VERSION.SDK_INT >= 18) {
list = nodeInfo.findAccessibilityNodeInfosByViewId("com.android.settings:id/right_button");
} else if (Build.VERSION.SDK_INT >= 14) {
list = nodeInfo.findAccessibilityNodeInfosByText("com.android.settings:id/right_button");
}
for (AccessibilityNodeInfo node : list) {
Log.i(TAG, "ACC::onAccessibilityEvent: left_button " + node);
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
} else if ("android.app.AlertDialog".equals(event.getClassName())) {
list = new ArrayList<>();
if (Build.VERSION.SDK_INT >= 18) {
list = nodeInfo.findAccessibilityNodeInfosByViewId("android:id/button1");
} else if (Build.VERSION.SDK_INT >= 14) {
list = nodeInfo.findAccessibilityNodeInfosByText("android:id/button1");
}
for (final AccessibilityNodeInfo node : list) {
Log.i(TAG, "ACC::onAccessibilityEvent: button1 " + node);
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
//node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
return;
}
}
@Override
public void onInterrupt() {
// TODO Auto-generated method stub
Log.i("Interrupt", "Interrupt");
}
@Override
protected void onServiceConnected() {
AccessibilityServiceInfo info = getServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_WINDOWS_CHANGED | AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED | AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED;
info.flags = AccessibilityServiceInfo.DEFAULT;
info.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
info.flags = AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;
info.flags = AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY;
info.flags = AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS;
// We are keeping the timeout to 0 as we don’t need any delay or to pause our accessibility events
info.feedbackType = AccessibilityEvent.TYPES_ALL_MASK;
info.notificationTimeout = 100;
this.setServiceInfo(info);
// Toast.makeText(getApplicationContext(), "onServiceConnected", Toast.LENGTH_SHORT).show();
}
private static void logd(String msg) {
Log.d(TAG, msg);
}
private static void logw(String msg) {
Log.w(TAG, msg);
}
private static void logi(String msg) {
Log.i(TAG, msg);
}
}
- 1. WLST - 強制停止應用程序
- 2. Visual Basic:強制應用程序停止
- 3. 如何以編程方式強制停止應用程序 - Android
- 4. 如何防止用戶在Android上「強制停止」我的應用程序?
- 5. 通過設置>應用程序>應用程序>強制停止應用程序「強制停止」時SharedPreferences清除
- 6. 在管理應用程序中禁用強制停止按鈕
- 7. Android應用程序停止響應SQLCipher
- 8. 應用程序強制停止。爲什麼?
- 9. Robotium強制停止測試中的應用程序
- 10. GenyMotion上的應用程序強制停止
- 11. 選擇選定的ID時,應用程序強制停止
- 12. 防止強制殺死應用程序
- 13. telephonyManager.listen強制應用程序終止
- 14. 如何強制停止我的應用程序中的其他Android服務?
- 15. android應用程序通知不工作時,應用程序被迫或強制停止在米4i
- 16. Android:應用程序意外停止
- 17. Android應用程序 - 不幸停止
- 18. Android開發停止應用程序
- 19. Android TextView.setText(「」)停止我的應用程序
- 20. Android谷歌應用程序停止
- 21. Android應用程序意外停止
- 22. Android應用程序意外停止
- 23. Android應用程序停止工作-Eclipse
- 24. Android:應用程序意外停止
- 25. Android TTS - 應用程序意外停止
- 26. 停止關閉Android應用程序
- 27. 不幸停止應用程序停止
- 28. 如何防止我的android應用程序強制關閉?
- 29. Android SharedPreferences強制關閉應用程序
- 30. 如何在Android中強制停止AsyncTask
你真的不應該強行停止應用程序。您應該讓操作系統生命週期完成。在'startActivity'後嘗試'finish()' –