我先说一下我的目的:我的程序监听系统广播,如果发现网络发生改变,就把另一个程序先干掉,然后再重新启动它。这个程序的包名是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);
                    }           
  }
}  请问这个问题是出在哪里呢?三、现在的问题就是怎样才能杀掉另一个程序和重新启动另一个程序。请高手指点一下关键所在。谢谢!