android啟動另一個應用
① Android怎樣在應用中啟動另一個應用並放在後台運行
啟動另一個應用:
Intent intent = new Intent();
intent.setClassName("目標應用的包名", "目標應用的目標Activity");
startActivity(intent);
後台運行就只能啟動目標應用的Service,即目標應用的目標Activity是一個Service。
② 怎麼打開第三方應用程序
需求場景:
在自己開發的應用程序里,有個跳轉到其他應用的按鈕,比如分享到「新浪微博」,當點擊這個按鈕時,先判斷手機中是否有安裝「新浪微博」這個程序,有則啟動「新浪微博」客戶端,否則從指定的URL地址進行下載。
簡言之,開啟其他應用,包名跳轉。
1、從一個應用跳轉到其他應用要獲取什麼信息?
need第三方應用的包名,以及下載鏈接。
2、如何判斷本機是否已經安裝了該第三方應用?
(1)首先得到該程序的包名;
別人的應用程序我怎麼知道他的包名和類名?
- 通過adb裡面看程序裝的所有應用
- 寫一個遍歷程序,獲取所有已安裝的程序,把包名列印出來,新浪微博的包名中應該會帶有sina字眼,如 com.sina.weibo
//獲取已經安裝apk列表
List<PackageInfo> packList = context.getPackageManager().getInstalledPackages(0);
//獲得包名PackageInfo.packageName
(2)然後通過PackageManager判斷是否存在該包的程序 。
android的每一個apk的activity的包的名字都是唯一的,所以可以通過判斷這個activity所在包的名字來判斷是不是該Apk已經安裝
例1:
//以twitter程序為例,假設twitter程序包名為「com.twitter.android」。這時候可用以下代碼來判斷是否被安裝。
//QQ客戶端的包名是"com.tencent.mobileqq"
PackageInfo packageInfo;//PackageInfo所在包為android.content.pm
try {
packageInfo = this.getPackageManager().getPackageInfo("com.twitter.android", 0);
} catch (NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
}
if(packageInfo ==null){
System.out.println("沒有安裝");
}else{
System.out.println("已經安裝");
}
例2:可以封裝到方法里,操作一樣,只是把包名作為參數傳入,返回值為布爾類型
private boolean isPkgInstalled(String pkgName) {
PackageInfo packageInfo = null;
try {
packageInfo = this.getPackageManager().getPackageInfo(pkgName, 0);
} catch (NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
}
if (packageInfo == null) {
return false;
} else {
return true;
}
3、怎麼跳轉?
通過隱式intent跳轉
例3:PackageManager中有getLaunchIntentForPackage這個方法!
//String pkg代表包名,String download代表下載url
final PackageManager pm = context.getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(pkg);
if (null == intent) {//沒有獲取到intent
if (!TextUtils.isEmpty(downoad)) {//跳轉到下載第三方應用界面
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(downoad)));
}
} else {
context.startActivity(intent);
}
例4:在我們自己的程序中調用其他程序時往往要檢查手機有沒有安裝該軟體後再做相應操作,如沒有安裝,用intent將用戶引導至android market去下載該程序,如已安裝則打開該程序,並傳入參數和調用其功能。
//下面介紹怎麼判斷手機已安裝某程序的方法:
private boolean isAvilible(Context context, String packageName){
final PackageManager packageManager = context.getPackageManager();//獲取packagemanager
List< packageInfo> pinfo = packageManager.getInstalledPackages(0);//獲取所有已安裝程序的包信息
List<String> pName = new ArrayList<String>();//用於存儲所有已安裝程序的包名
//從pinfo中將包名字逐一取出,壓入pName list中
if(pinfo != null){
for(int i = 0; i < pinfo.size(); i++){
String pn = pinfo.get(i).packageName;
pName.add(pn);
}
}
return pName.contains(packageName);//判斷pName中是否有目標程序的包名,有TRUE,沒有FALSE
}
//下面是調用該方法進行判斷後的邏輯:
//已安裝,打開程序,需傳入參數包名:"com.skype.android.verizon"
if(isAvilible(this, "com.skype.android.verizon")){
Intent i = new Intent();
ComponentName cn = new ComponentName("com.skype.android.verizon",
"com.skype.android.verizon.SkypeActivity");
i.setComponent(cn);
startActivityForResult(i, RESULT_OK);
}
//未安裝,跳轉至market下載該程序
else {
Uri uri = Uri.parse("market://details?id=com.skype.android.verizon");//id為包名
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
}
參考鏈接:http://www.eoeandroid.com/thread-152763-1-1.html?_dsign=2242c74c
4、跳轉後呢?
如何在android應用程序中啟動其他apk程序,被啟動程序退出後返回之前的程序?
//你只需要在A中打開B,並為B設置 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//不做對A的關閉處理finish() 這樣就可以了
Intent intent=new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(new ComponentName(objAppClassName, mainActivity));
context.startActivity(intent);
例5:原始跳轉方法,要包名和類名(通過ComponentName),後來可以只要包名…
Android 開發有時需要在一個應用中啟動另一個應用,比如Launcher載入所有的已安裝的程序的列表,當點擊圖標時可以啟動另一個應用。
一般我們知道了另一個應用的包名和MainActivity的名字之後便可以直接通過如下代碼來啟動:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
但是更多的時候,我們一般都不知道應用程序的啟動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<ResolveInfo> 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);
}
}
③ android怎麼打開另外的應用程序
我們可以通過ComponentName以及Intent的setComponent來實現:在一個應用程序裡面啟動另外一個已經安裝的應用程序或系統程序。
下面是一個在一個應用程序裡面啟動另外一個已經安裝的程序,如下:
[javascript]
//組件名稱,第一個參數是應用程序的包名,後一個是這個應用程序的主Activity
ComponentName com = new ComponentName("com.antroid.Test", "com.antroid.Test.TestActivity");
Intent intent = new Intent();
//設置部件
intent.setComponent(com);
startActivity(intent);
//組件名稱,第一個參數是應用程序的包名,後一個是這個應用程序的主Activity
ComponentName com = new ComponentName("com.antroid.Test", "com.antroid.Test.TestActivity");
Intent intent = new Intent();
//設置部件
intent.setComponent(com);
startActivity(intent);
我們也可以使用下面的代碼啟動系統的日歷程序:
[javascript]
Intent intent=new Intent();
intent.setComponent(new ComponentName("com.android.calendar", "com.android.calendar.LaunchActivity"));
startActivity(intent);
Intent intent=new Intent();
intent.setComponent(new ComponentName("com.android.calendar", "com.android.calendar.LaunchActivity"));
startActivity(intent
④ Android 在一個應用中如何啟動另外一個已安裝的應用!!!
啟動另一個應用:
Intent
intent
=
new
Intent();
intent.setClassName("目標應用的包名",
"目標應用的目標Activity");
startActivity(intent);
後台運行就只能啟動目標應用的Service,即目標應用的目標Activity是一個Service。
⑤ android Intent啟動其它應用
可以帶別的東西。
需要com.rarlab.rar.MainActivity類的支持。
com.rarlab.rar.MainActivity可以在onCreate中通過getIntent來得到
傳入來的intent.
intent可以設置一些數據,比如Intent.putExtra("type","rar")
然後onCreate得到後,可以Intent.getStringExtra("type")
⑥ 如何通過android的應用程序調用另一個應用
如果你知道另外一個程序的類名就可以這樣寫
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentNamecn=newComponentName(packageName,className);
intent.setComponent(cn);
startActivity(intent);
2.如果你只知道包名不知道類名,首先獲取類名
privatevoidopenApp(StringpackageName){
PackageInfopi=getPackageManager().getPackageInfo(packageName,0);
IntentresolveIntent=newIntent(Intent.ACTION_MAIN,null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
List<ResolveInfo>apps=pm.queryIntentActivities(resolveIntent,0);
ResolveInfori=apps.iterator().next();
if(ri!=null){
StringpackageName=ri.activityInfo.packageName;
StringclassName=ri.activityInfo.name;
Intentintent=newIntent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentNamecn=newComponentName(packageName,className);
intent.setComponent(cn);
startActivity(intent);
}
}
然後使用1中的方法調用程序
⑦ android 怎麼啟動另一個應用
Intent intent = new Intent();
PackageManager packageManager = this.getPackageManager();
intent = packageManager.getLaunchIntentForPackage(packageName);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_CLEAR_TOP) ;
this.startActivity(intent);
⑧ Android中怎麼在應用A中啟動或安裝應用B
有時候一個應用需要啟動另外一個應用來完成操作,比如在某些應用中打開鬧鍾,相機,日歷等等。
啟動或安裝相應的應用的方法:
Step1:判斷是否安裝目標應用。只要知道目標應用的安裝包名就可以通過判斷"/data/data/packagename"是否存在來實現。
[java] view plain
⑨ 請問android如何在一個應用中啟動另一個應用
Intent myintent = new Intent(); ComponentName mycom = new ComponentName("com.update.mm","com.update.mm.mmupdate"); myintent.setComponent(mycom); myintent.setAction("android.intent.action.VIEW"); startActivity(myintent);
⑩ android 中關於一個應用開啟另一個應用
一般情況下我們是不知道包名和類名的,那怎麼辦呢?
其實手機安裝的每一個應用的包名都是可以查到的,只要我們查到相關應用的包名,再通過它獲得主類名,再按照上面的方法就可以了。
第一步:怎麼獲得包名?
PackageManager packageManager = context.getPackageManager();
packageManager.getInstalledApplications(0);
這就得到了手機上安裝的所有應用的程序信息,當然包括包名,只需要查找自己需要的程序就可以