当前位置:编程学习 > wap >>

新手向大家请教几个问题

我先说一下我的目的:我的程序监听系统广播,如果发现网络发生改变,就把另一个程序先干掉,然后再重新启动它。这个程序的包名是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);
                    }           
  }
}  

请问这个问题是出在哪里呢?

三、现在的问题就是怎样才能杀掉另一个程序和重新启动另一个程序。请高手指点一下关键所在。

谢谢!
--------------------编程问答-------------------- 表示关注。
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,