2013-10-26 17 views
5

Trước tiên, tôi đã tìm thấy một số câu hỏi tương tự trên StackOverflow nhưng không có câu trả lời nào giải quyết được vấn đề của tôi. Tôi cũng googled nó và đọc tất cả 30 kết quả hàng đầu.killBackgroundProcesses no working

Vì vậy, tôi đang viết một Dịch vụ sẽ kiểm tra những gì đang chạy ở nền trước, cứ 20 giây. Nếu ứng dụng nền trước nằm trong danh sách đen, tôi sẽ bật lên một hộp thoại Hoạt động để nói rằng "ứng dụng hiện tại cần phải dừng lại", sau đó khi người dùng nhấn OK của hộp thoại đó, ứng dụng đó sẽ bị dừng qua phương pháp sau:

private void killApp(String packageName) { 
    ActivityManager am = (ActivityManager)getApplicationContext().getSystemService(ACTIVITY_SERVICE); 
    Log.d(TAG, "Trying to kill app " + packageName); 
    am.killBackgroundProcesses(packageName); 
} 

Tuy nhiên, ứng dụng không bị dừng hoàn toàn trong thử nghiệm của tôi. Khi hộp thoại bị đóng, ứng dụng tiền cảnh vẫn ở đó, chính xác cùng trạng thái như trước khi hộp thoại xuất hiện. Tôi tin rằng tôi có cấp API phù hợp cũng như các quyền cần thiết:

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="18" /> 

<uses-permission android:name="android.permission.GET_TASKS" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> 

Tôi thực sự gặp khó khăn, bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!

+0

may mắn nào? bạn cũng có thể muốn kiểm tra điều này ... http://stackoverflow.com/questions/7195167/automate-closing-of-applications-in-android – Behnam

+0

@Campiador Không may mắn. Có vẻ như ngày nay bạn chỉ đơn giản là không thể làm những việc như thế trên hệ thống android. – user690421

Trả lời

5

/Android sẽ không giết ứng dụng hoặc quy trình khi nó hiển thị trên màn hình tức là chế độ xem đang kích hoạt. để chuyển sang màn hình chủ và sau đó giết ứng dụng hoặc xử lý bạn muốn/

public void KillApplication(String KillPackage) 
{ 
    ActivityManager am = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);  

    Intent startMain = new Intent(Intent.ACTION_MAIN); 
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    this.startActivity(startMain); 



    am.killBackgroundProcesses(KillPackage); 
    Toast.makeText(getBaseContext(),"Process Killed : " + KillPackage ,Toast.LENGTH_LONG).show();  
} 
2

Bạn có thể làm như sau:

Đầu tiên, thêm android:sharedUserId="android.uid.system" bên trong thẻ manifest trong AnfroidManifest.xml, file manifest của bạn sẽ giống như sau:

<manifest 
xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.myapplication" 
android:sharedUserId="android.uid.system"> 
... 

Thứ hai, yêu cầu quyền sở hữu FORCE_STOP_PACKAGES. Bước này làm cho file manifest của bạn trông giống như:

... 
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" /> 
... 

Thứ ba, đối với các gói bạn muốn dừng lại, làm:

final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
am.forceStopPackage(PACKAGE_NAME); 

Chỉ cần thay thế PACKAGE_NAME với tên gói của bạn.

Nếu bạn sử dụng Eclipse, chỉ cần bỏ qua bất kỳ lỗi lint nào trong Preferences > Android > Lint Error Checking.

Bạn cần đặt gói ứng dụng vào thư mục hệ thống để có được sự cho phép thích hợp.

+1

bạn sẽ phải ký apk của mình dưới dạng ứng dụng hệ thống -> http://stackoverflow.com/questions/3635101/how-to-sign-android-app-with-system-signature –

0

Bạn phải làm cho ứng dụng của bạn có đặc quyền hệ thống, đó là ứng dụng hệ thống hoặc bạn có thể root điện thoại để ứng dụng của bạn có thể giết ứng dụng khác với tư cách người dùng root.