我先说一下我的目的:我的程序监听系统广播,如果发现网络发生改变,就把另一个程序先干掉,然后再重新启动它。这个程序的包名是com.dragon.netguard。就这么简单的事情,刚刚接触,这几天先把eclipse搞好,然后写程序,但还是搞不定,特向大家请教。
一、监听系统广播
按照下面的程序,我已经实现了系统广播。这个没有问题。AndroidManifest.xml文件:<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.myprogram"
android:versionCode="1"
android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /> <application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity
android:name=".MyprogramActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="NetworkReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
</application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.GET_TASKS"></uses-permission>
<uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"></uses-permission></manifest>NetworkReceiver.java文件:package com.android.myprogram;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;public class NetworkReceiver extends BroadcastReceiver { private static final String TAG = "NetworkStateReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "network state changed.");
if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")) {
Toast.makeText(context, "network changed!", 0).show(); //apn状态切换.
}
}
} myprogramactivity.java文件:package com.android.myprogram;import android.app.Activity;
import android.app.ActivityManager;
import android.os.Bundle;
public class MyprogramActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}二、杀进程功能
在实现了上面监听功能后,我想在上面增加杀进程的功能,可是不管我用那个方法,都杀不掉,比如:
1、我先试图在myprogramactivity里面杀进程:
package com.android.myprogram;import android.app.Activity;
import android.app.ActivityManager;
import android.os.Bundle;public class MyprogramActivity extends Activity {
/** Called when the activity is first created. */
ActivityManager am = null;
或者private ActivityManager activityManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityManager localActivityManager = this.am;
localActivityManager.killBackgroundProcesses("com.dragon.netguard");
或者: localActivityManager.forceStopPackage("com.dragon.netguard");
又或者:localActivityManager.restartPackage("com.dragon.netguard");又或者: ActivityManager mymanager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
mymanager.killBackgroundProcesses("com.dragon.netguard"); setContentView(R.layout.main);
}
}上面的语句不管是在真机还是模拟器中,都没有提示错误,但就是com.dragon.netguard没有被杀掉。请问高手,还有哪个地方没有弄好?2、上面的杀进程语句,是否可以放在NetworkReceiver里面?
我在NetworkReceiver.java里面试过:
package com.android.myprogram;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.app.ActivityManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import android.widget.Toast;public class NetworkReceiver extends BroadcastReceiver { private static final String TAG = "NetworkStateReceiver";
ActivityManager am = null;
或者 private ActivityManager activityManager; @Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "network state changed.");
if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")) {
Toast.makeText(context, "network changed!", 0).show(); }
ActivityManager localActivityManager = this.am;
localActivityManager.killBackgroundProcesses("com.dragon.netguard");
或者: localActivityManager.forceStopPackage("com.dragon.netguard");
又或者:localActivityManager.restartPackage("com.dragon.netguard");又或者: ActivityManager mymanager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
mymanager.killBackgroundProcesses("com.dragon.netguard");
}
} 在上面的程序中,如果用localActivityManager的话,那么只要一执行,就发生致命错误,强制退出了。
如果用下面的ActivityManager mymanager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);那么eclipse提示错误,说:The method getSystemService(Object) is undefined for the type NetworkReceiver.java。请问这问题又出在哪里呢?3、我还试图在myprogramactivity里面直接杀掉,然后再在NetworkReceiver里面重新启动自己,虽然没有提出出错,但没有启动成功:package com.android.myprogram;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
//import android.net.ConnectivityManager;
//import android.net.NetworkInfo;
import android.util.Log;
import android.widget.Toast;public class NetworkReceiver extends BroadcastReceiver { private static final String TAG = "NetworkStateReceiver"; @Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "network state changed.");
if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")) {
Toast.makeText(context, "network changed!", 0).show(); Intent localIntent3 = new Intent(context, MyprogramActivity.class);
context.startService(localIntent3);
}
}
} 请问这个问题是出在哪里呢?三、现在的问题就是怎样才能杀掉另一个程序和重新启动另一个程序。请高手指点一下关键所在。谢谢!
一、监听系统广播
按照下面的程序,我已经实现了系统广播。这个没有问题。AndroidManifest.xml文件:<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.myprogram"
android:versionCode="1"
android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /> <application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity
android:name=".MyprogramActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="NetworkReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
</application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.GET_TASKS"></uses-permission>
<uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"></uses-permission></manifest>NetworkReceiver.java文件:package com.android.myprogram;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;public class NetworkReceiver extends BroadcastReceiver { private static final String TAG = "NetworkStateReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "network state changed.");
if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")) {
Toast.makeText(context, "network changed!", 0).show(); //apn状态切换.
}
}
} myprogramactivity.java文件:package com.android.myprogram;import android.app.Activity;
import android.app.ActivityManager;
import android.os.Bundle;
public class MyprogramActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}二、杀进程功能
在实现了上面监听功能后,我想在上面增加杀进程的功能,可是不管我用那个方法,都杀不掉,比如:
1、我先试图在myprogramactivity里面杀进程:
package com.android.myprogram;import android.app.Activity;
import android.app.ActivityManager;
import android.os.Bundle;public class MyprogramActivity extends Activity {
/** Called when the activity is first created. */
ActivityManager am = null;
或者private ActivityManager activityManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityManager localActivityManager = this.am;
localActivityManager.killBackgroundProcesses("com.dragon.netguard");
或者: localActivityManager.forceStopPackage("com.dragon.netguard");
又或者:localActivityManager.restartPackage("com.dragon.netguard");又或者: ActivityManager mymanager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
mymanager.killBackgroundProcesses("com.dragon.netguard"); setContentView(R.layout.main);
}
}上面的语句不管是在真机还是模拟器中,都没有提示错误,但就是com.dragon.netguard没有被杀掉。请问高手,还有哪个地方没有弄好?2、上面的杀进程语句,是否可以放在NetworkReceiver里面?
我在NetworkReceiver.java里面试过:
package com.android.myprogram;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.app.ActivityManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import android.widget.Toast;public class NetworkReceiver extends BroadcastReceiver { private static final String TAG = "NetworkStateReceiver";
ActivityManager am = null;
或者 private ActivityManager activityManager; @Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "network state changed.");
if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")) {
Toast.makeText(context, "network changed!", 0).show(); }
ActivityManager localActivityManager = this.am;
localActivityManager.killBackgroundProcesses("com.dragon.netguard");
或者: localActivityManager.forceStopPackage("com.dragon.netguard");
又或者:localActivityManager.restartPackage("com.dragon.netguard");又或者: ActivityManager mymanager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
mymanager.killBackgroundProcesses("com.dragon.netguard");
}
} 在上面的程序中,如果用localActivityManager的话,那么只要一执行,就发生致命错误,强制退出了。
如果用下面的ActivityManager mymanager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);那么eclipse提示错误,说:The method getSystemService(Object) is undefined for the type NetworkReceiver.java。请问这问题又出在哪里呢?3、我还试图在myprogramactivity里面直接杀掉,然后再在NetworkReceiver里面重新启动自己,虽然没有提出出错,但没有启动成功:package com.android.myprogram;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
//import android.net.ConnectivityManager;
//import android.net.NetworkInfo;
import android.util.Log;
import android.widget.Toast;public class NetworkReceiver extends BroadcastReceiver { private static final String TAG = "NetworkStateReceiver"; @Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "network state changed.");
if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")) {
Toast.makeText(context, "network changed!", 0).show(); Intent localIntent3 = new Intent(context, MyprogramActivity.class);
context.startService(localIntent3);
}
}
} 请问这个问题是出在哪里呢?三、现在的问题就是怎样才能杀掉另一个程序和重新启动另一个程序。请高手指点一下关键所在。谢谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货