بستن یک برنامه در حال اجرا
سلام دوستان <
من از این کد استفاده میکنم که firefox رو ببندم <
اما کار نمیکنه و firefox در لیست برنامه های باز می مونه
اگر کد مناسبی رو دارید ممنون میشم <
ActivityManager servMng;
servMng = (ActivityManager) SWFActivity.this.getSystemService(SWFActivity.this.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> list = servMng.getRunningAppProcesses();
if (list != null) {
String value1 = "org.mozilla.firefox";
String value2 = "org.mozilla.firefox.App";
for (int i = 0; i < list.size(); ++i) {
if (value1.matches(list.get(i).processName) || value2.matches(list.get(i).processName)) {
int pid1 = android.os.Process.getUidForName(value1);
int pid2 = android.os.Process.getUidForName(value2);
android.os.Process.killProcess(pid1);
android.os.Process.killProcess(pid2);
Toast.makeText(getApplicationContext(), value1 + pid1, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), value2 + pid2, Toast.LENGTH_SHORT).show();
از این هم استفاده میکنم جواب نمیده <
ActivityManager servMng;
servMng = (ActivityManager) SWFActivity.this.getSystemService(SWFActivity.this.ACTIVITY_SERVICE);
servMng.killBackgroundProcesses("com.freestyler.balls.criss");
پرمیژن هم ست کردن <
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
هر بار که سوالی میپرسم
پدرم در میاد آخرش هم جوابش رو نصفه و نیمه خودم پیدا میکنم <
برنامه بخوبی کار میکنه و میتونه یک برنامه در حال اجرا رو با دستور زیر ببنده <
package com.freestyler.kill.criss;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class KillActivity extends Activity {
Button theButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
theButton = (Button) findViewById(R.id.button);
theButton.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v)
{
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
mActivityManager.killBackgroundProcesses("com.freestyler.balls.criss");
}
});
}
}
در واقع برنامه از لیست برنامه های موجود که در اکلیپس نمایش داده میشه بسته میشه <
اما از لیست مولتی تسکینگ (recent app) محیط اندروید خارج نمیشه <
برای این قسمت باید چکار کرد ؟
از صبح دارم سرچ میکنم ! چرا پس پیدا نمیشه ؟!
حتی اگر از این دستور توی CMD استفاده بشه <
باز هم برنامه ها بسته میشن < اما توی مولتی تسینگ (recent app) اندروید باز میمونند !
adb shell am kill-all
کل بازار رو سرچ کردم < هیچ Task Manager که یه برنامه نویس ایرانی اون رو نوشته باشه وجود نداره !
توی github.com هم کلا چهارتا برنامه بیشتر وجود نداره که توی همشون از متد killBackgroundProcesses استفاده شده !
اقا منم الان همین مشکل را دارم برنامه که با دکمه home میره توی backgrund بسته نمیشه و دوباره که باز میشه کرش می کنه
package ir.na9os;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;
import my_class.G;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
public class ActivityEnhanced extends Activity {
private long time = 3000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
G.CurrentActivity = this;
appisrun();
}
private void appisrun() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (isApplicationSentToBackground(G.context)) {
try {
kill_process();
} catch (Exception e) {
e.printStackTrace();
}
try {
killBackgroundProcesses(G.context);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}, time);
}
protected void killBackgroundProcesses(final Context context) {
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses(G.PACKAGE_NAME);
Log.i(G.APP_LOG, "delete app 3");
}
public static boolean isApplicationSentToBackground(final Context context) {
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
for (int i = 0; i < tasks.size(); i++) {
ComponentName topActivity = tasks.get(i).topActivity;
if (!topActivity.getPackageName().equals(
context.getPackageName())) {
Log.i(G.APP_LOG, "delete app 1");
return true;
}
}
}
return false;
}
protected void kill_process() {
try {
Process suProcess = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(
suProcess.getOutputStream());
os.writeBytes("adb shell" + "\n");
os.flush();
os.writeBytes("am force-stop ir.na9os" + "\n");
os.flush();
Log.i(G.APP_LOG, "delete app 2");
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onPause() {
super.onPause();
appisrun();
}
@Override
protected void onStop() {
super.onStop();
appisrun();
}
@Override
protected void onResume() {
super.onResume();
G.CurrentActivity = this;
appisrun();
}
}
سلام دوستان اومدم بنویسم جواب این مشکل پیدا نکردم که یک دفعه درست شد کشفش کردم
کد AndroidManifest.xml: تقریبا برای همه اکتیویتی ها همین کد را استفاده کردم
<activity
android:name="com.myapp.ActivityFilter"
android:autoRemoveFromRecents="true"
android:excludeFromRecents="true"
android:label="@string/app_name" >
</activity>
کد کلاس ActivityEnhanced:
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;
import my_class.G;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
public class ActivityEnhanced extends Activity {
private long time = 5000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
G.CurrentActivity = this;
appisrun();
}
private void appisrun() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (isApplicationSentToBackground(G.context)) {
try {
kill_process();
killapk();
} catch (Exception e) {
e.printStackTrace();
}
try {
killapk();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}, time);
}
protected void killapk() {
ActivityManager activityManager = (ActivityManager) G.context
.getSystemService(ACTIVITY_SERVICE);
activityManager.restartPackage(G.PACKAGE_NAME);
killBackgroundProcesses(G.context);
}
protected void killBackgroundProcesses(final Context context) {
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses(G.PACKAGE_NAME);
System.exit(0);
Log.i(G.APP_LOG, "delete app 3");
}
public static boolean isApplicationSentToBackground(final Context context) {
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
for (int i = 0; i < tasks.size(); i++) {
ComponentName topActivity = tasks.get(i).topActivity;
if (!topActivity.getPackageName().equals(
context.getPackageName())) {
Log.i(G.APP_LOG, "delete app 1");
return true;
}
}
}
return false;
}
protected void kill_process() {
try {
Process suProcess = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(
suProcess.getOutputStream());
os.writeBytes("adb shell" + "\n");
os.flush();
os.writeBytes("am force-stop " + G.PACKAGE_NAME + " \n");
os.flush();
Log.i(G.APP_LOG, "delete app 2");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onPause() {
super.onPause();
appisrun();
}
@Override
protected void onStop() {
super.onStop();
appisrun();
}
@Override
protected void onResume() {
super.onResume();
G.CurrentActivity = this;
appisrun();
}
}
داخل کلاس G هم:
public static String PACKAGE_NAME;
@Override public void onCreate() { super.onCreate(); PACKAGE_NAME = getApplicationContext().getPackageName(); context = getApplicationContext(); layoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
دسترسی های مورد نیاز:
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.GET_TASKS" />
اینم یه روش دیگه که اگه بخواید برنامتون کلا از لیست recent apps نمایش داده نشه!
ت منیفست برنامتون :
<activity
android:name=".ActivityMainKioskMode"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
اینو اضافه کنید :
<category android:name="android.intent.category.HOME" /> <!-- recent apps برای پاک کردن برنامه از لیست -->
</intent-filter>
</activity>
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .