android componentname activity,ComponentName的使用
ComponentName是安卓提供給我們的通過A應(yīng)用啟動B應(yīng)用的一個類,與Intent同位于Android.content包下,這個類主要用來定義可見一個應(yīng)用程序組件,例如:Activity,Service,BroadcastReceiver或者ContentProvider。
這是ComponentName的構(gòu)造函數(shù):ComponentName(String pkg,String cls)
在Android中詳細(xì)描述一個組件,我們需要知道該組件所在的應(yīng)用包名,也就是在AndroidManifest.xml文件中manifest根結(jié)點下的package=“com.XXXXX.XXXXX",還有組件在應(yīng)用程序中的完整路徑名,拿Activity來說,也就是activity節(jié)點中name屬性的值,如
mActivityName = "com.XxX.XXX.activity.diagnose.DiagnoseActivity"
所以ComponentName可以用來封裝一個組件的應(yīng)用包名和組件的名字
我們已經(jīng)知道,在Android中組件之間的交流往往使用意圖(Intent)來完成的,那么在Intent中有一個方法可以封裝一個ComponentName,最后我們在使用意圖去完成我們需要實現(xiàn)的功能。下面來講一下ComponentName如何使用。
Android 開發(fā)有時需要在一個應(yīng)用中啟動另一個應(yīng)用,比如Launcher加載所有的已安裝的程序的列表,當(dāng)點擊圖標(biāo)時可以啟動另一個應(yīng)用。一般我們知道了另一個應(yīng)用的包名和MainActivity的名字之后便可以直接通過如下代碼來啟動(其中className是指完整的類名):
啟動目標(biāo)APP的主頁面
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
啟動目標(biāo)APP的內(nèi)部普通頁面
ComponentName cn = new ComponentName(mPackageName, mActivityName);
try {
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("type", "1");//傳遞值
intent.putExtras(bundle);
intent.setComponent(cn);
startActivityForResult(intent, REQUEST_ID);//等待目標(biāo)頁面返回的結(jié)果
} catch (Exception e) {
e.printStackTrace();
}
但是有的時候,我們一般都不知道應(yīng)用程序的啟動Activity的類名,而只知道包名,我們可以通過ResolveInfo類來取得啟動Acitivty的類名。
private void openApp(String packageName) {
PackageInfo pi = getPackageManager().getPackageInfo(packageName, 0);
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
List apps = pm.queryIntentActivities(resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null) {
String packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
}
}
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的android componentname activity,ComponentName的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星note2+android8.0,放
- 下一篇: html语言可以写模版继承吗,16-Dj