使用 am 命令可以在命令行方式下启动系统中已经存在的 app.
adb shell 进入命令行。
am 回车,可以看到关于 am 的帮助信息。
关于各个参数的含义,在这里不再赘述,举几个例子即可。
为了说明问题,自己写一个 app,一个 activity、一个 service:
源码:
package mark.zhang;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
public class AmActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentFilter mFilter = new IntentFilter();
mFilter.addAction("action_finish");
registerReceiver(listener, mFilter);
}
private BroadcastReceiver listener = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if ("action_finish".equals(action)) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 5000);
}
}
};
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(listener);
};
}
package mark.zhang;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d("mark", "MyService--- onCreate callbacks");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("mark", "MyService--- onStartCommand callbacks");
return super.onStartCommand(intent, flags, startId);
}
}
在 AmActivity 里面接收到广播就在 5s 后 finish.
将这个工程编译之后的 apk 安装到模拟器:
adb install **/Am.apk
1. 启动 activity
am start -n mark.zhang/mark.zhang.AmActivity
这个时候 activity 被启动了
2. 发送广播
am broadcast -a "action_finish"
5s 之后,可以看到 AmActivity 被 finish.
3. 启动服务
am startservice -n mark.zhang/mark.zhang.MyService
打印信息
相关源码
framworks/base/cmds/am/src/com/android/commands/am/Am.java
程序入口
/**
* Command-line entry point.
*
* @param args The command-line arguments
*/
public static void main(String[] args) {
try {
(new Am()).run(args);
} catch (IllegalArgumentException e) {
showUsage();
System.err.println("Error: " + e.getMessage());
} catch (Exception e) {
System.err.println(e.toString());
System.exit(1);
}
}