1.android中查看是否有能够打开intent的Activity
android中查看是否有能够打开intent的Activity方式有三种(如果没有打开intent的Activity,会报错ActivityNotFound)
- intent的resolveActivity
- packagemanager的resolveActivity
- packagemanager的queryIntentActivities
区别:
resolveActivity返回最佳匹配的一个Activity
queryIntentActivities返回匹配的所有Activity List
具体使用代码如下
b=(Button) findViewById(R.id.to2);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.chj.a");
// intent.setDataAndType(Uri.parse("content://xxx"), "text/plain");
if(null != intent.resolveActivity(getPackageManager())){
Log.e("chj", "target activities are: "+intent.resolveActivity(getPackageManager()));
startActivity(intent);
}else{
Toast.makeText(MainActivity.this, "Target Activity Not Found", Toast.LENGTH_SHORT).show();
}
if(null != getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY)){
Log.e("chj", "target activities are: "+getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY));
}else{
Toast.makeText(MainActivity.this, "Target Activity Not Found", Toast.LENGTH_SHORT).show();
}
if(getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY).size()>0){
Log.e("chj", "target activities are: "+getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY));
}else{
Toast.makeText(MainActivity.this, "Target Activity Not Found", Toast.LENGTH_SHORT).show();
}
}
});
2.查看Activity堆栈信息:
adb shell dumpsys activity activities
log中Running activities附近的log
3.获取进程名称
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
Log.v("chj", "MyApplication onCreate "+getProcessName());
}
public String getProcessName(){
int pid = android.os.Process.myPid();
String processName = "";
ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo process: manager.getRunningAppProcesses()) {
if(process.pid == pid)
{
processName = process.processName;
}
}
return processName;
}
}
注意Application需要在清单文件注册android:name,否则onCreate不会执行