`
v5browser
  • 浏览: 1158868 次
社区版块
存档分类
最新评论

Android在应用中依据包名启动另外一个APP

 
阅读更多

以下为TestIntentData工程

MainActivity如下:

package cn.testintentdata;
import java.util.List;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
/**
 * Demo描述:
 * 应用中依据包名启动另外一个APP
 *
 */
public class MainActivity extends Activity {
	private Button mButton;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}
	private void init(){
		mButton=(Button) findViewById(R.id.button);
		mButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				startAnotherApp("cc.testintent");
			}
		});
	}
	
	private void startAnotherApp(String packageName){
		PackageInfo packageInfo = null;
		try {
			packageInfo = getPackageManager().getPackageInfo(packageName, 0);
			if (packageInfo==null) {
				System.out.println("packageInfo==null");
			} else {
				System.out.println("packageInfo!=null");
			}
		} catch (NameNotFoundException e) {
			e.printStackTrace();
		}
		 
		
		//<data android:scheme="app" android:host="jp.co.cybird.barcodefootballer/" />
		
		
		Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
		resolveIntent.setData(Uri.parse("app://jp.co.cybird.barcodefootballer/"));
		resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
		resolveIntent.setPackage(packageInfo.packageName);
		System.out.println("packageInfo.packageName="+packageInfo.packageName);
		
		List<ResolveInfo> resolveInfoList = 
		getPackageManager().queryIntentActivities(resolveIntent, 0);
		
		System.out.println("resolveInfoList.size()="+resolveInfoList.size());
		 
		ResolveInfo resolveInfo = resolveInfoList.iterator().next();
		if (resolveInfo != null ) {
			String activityPackageName = resolveInfo.activityInfo.packageName;
			String className = resolveInfo.activityInfo.name;
			 
			Intent intent = new Intent(Intent.ACTION_MAIN);
			intent.addCategory(Intent.CATEGORY_LAUNCHER);
			ComponentName componentName = new ComponentName(activityPackageName, className);
			 
			intent.setComponent(componentName);
			startActivity(intent);
		}
		
	}

}


main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="click me" 
        android:layout_centerInParent="true"
        />

</RelativeLayout>


以下为TestIntent工程

MainActivity如下:

package cc.testintent;
import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

}


main.xml如下:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="大 家 好"
        android:layout_centerInParent="true"
    />

</RelativeLayout>


AndroidManifest.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cc.testintent"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="cc.testintent.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <data android:scheme="app"/>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


分享到:
评论

相关推荐

    JS判断是否安装APP

    - Web App Manifest:这是一个JSON文件,用于提供关于Web应用的信息,如应用名称、图标和启动屏幕显示。通过检查浏览器是否支持Web App Manifest API,可以初步判断是否支持与APP的交互。 2. **使用`navigator....

    APP自助生成打包方案及说明

    7. **上传和发布到应用市场**:最后,将生成的APK和IPA文件上传至Google Play Store(Android)和App Store(iOS),经过审核后,用户就能在各自的市场上搜索并下载APP。 二、方案关键点说明 1. **打包技术**:此...

    android 核心分析之------Android 启动过程详解

    在Android启动的初始阶段,内核加载并初始化所有必要的设备驱动和数据结构后,会启动一个用户级进程——`init`。`init`是Android系统中首个启动的进程,扮演着系统引导的重要角色。`init`进程依据`init.rc`和特定于...

    Android手机app百度浏览器所有小图标素材

    在Android开发中,UI设计是至关重要的一个环节,而图标作为用户界面的重要组成部分,能够直观地传达功能信息,提升用户体验。本资源包“Android手机app百度浏览器所有小图标素材”正是针对这一需求,提供了用于...

    Android 开源中国android手机应用最新版本客户端-IT计算机-毕业设计.zip

    在本项目中,我们关注的是一个基于Android平台的开源中国应用程序的最新版本客户端。这个源码库是一个典型的Android应用开发示例,非常适合那些正在进行毕业设计或希望深入理解Android开发的学生和开发者。通过分析...

    Android应用源码之闪屏加退出提示应用-IT计算机-毕业设计.zip

    本项目是一个Android应用源码示例,它展示了如何将这两部分集成到一个应用程序中。 首先,让我们来探讨"闪屏页"。闪屏页通常作为应用启动时的第一个界面,展示品牌标识、加载应用资源或执行初始化操作。在Android中...

    iOS和Android的app界面设计规范.pdf

    iOS和Android作为两大主流移动操作平台,它们各自有着一套界面设计规范。设计师在设计移动应用时,需要遵循这些规范...对于刚入行的互联网产品设计师和开发人员来说,这些规范是设计iOS和Android应用时的重要参考依据。

    Android应用源码SampleSyncAdapter-IT计算机-毕业设计.zip

    在Android应用开发领域,SampleSyncAdapter是一个重要的学习资源,尤其对于毕业设计的学生来说,它提供了一个实践和理解Android同步适配器(Sync Adapter)机制的实例。本文将深入探讨SampleSyncAdapter的核心功能、...

    基于Android Studio实现的聚合支付SDK源码,对微信、支付宝、银联APP支付的二次封装,对外提供一个简单的接口

    本篇将详细介绍基于Android Studio实现的聚合支付SDK,该SDK已经对微信、支付宝、银联这三大主流移动支付平台的APP支付进行了二次封装,使得开发者只需要对接一个简单的接口,就能实现多渠道支付功能。 一、聚合...

    Android应用源码之MyActivity-IT计算机-毕业设计.zip

    在Android应用开发中,"MyActivity"通常是一个基础的自定义活动类,是开发者为了实现特定功能而创建的。这份名为"MyActivity-IT计算机-毕业设计.zip"的压缩包资源,很显然是一份针对Android应用的毕业设计项目,旨在...

    Android应用源码之应用程序之间的通信介绍-IT计算机-毕业设计.zip

    在Android平台上,应用程序之间的通信(Application-to-Application Communication,简称A2AC)是开发者经常会遇到的一个重要主题。这个主题涉及到如何让不同的应用之间共享数据、启动服务、发送广播以及使用内容...

    毕业论文安卓301玩转英语app.doc

    Android应用程序开发是一个复杂的过程,涉及到多个方面的知识点。下面是基于毕业论文“玩转英语App”的知识点总结。 一、Android平台介绍 * Android是一款开源的移动操作系统,由Google公司开发和维护。 * Android...

    移动App性能评测与优化 - 腾讯TMQ

    总之,移动App性能评测与优化是一个持续的过程,需要开发者对平台特性有深入理解,结合具体测试数据进行分析,不断迭代优化。腾讯TMQ团队的经验分享将为开发者提供宝贵的指导,帮助我们创建更高效、更稳定的Android...

    Android应用源码之Android高级图片滚动控件,3D版的图片轮播器Demo-IT计算机-毕业设计.zip

    在进行Android应用开发时,图片轮播器是一个常见的组件,常见于应用的启动界面、产品展示或者作为用户界面的一部分。 首先,我们需要理解Android开发的基础。Android是Google开发的一个开源操作系统,主要应用于...

    基于Android的天气预报APP的开发.docx

    1. **LitePal**: 作为一款轻量级的数据持久化框架,LitePal 在 Android 开发中被广泛应用于本地数据存储。本项目利用 LitePal 来管理应用程序中的天气数据,包括历史记录、用户偏好设置等。 2. **Linux 内核层、...

    Android应用源码任务管理器源码-IT计算机-毕业设计.zip

    在Android应用开发中,任务管理器是一个至关重要的组件,它帮助开发者有效地管理和监控应用程序的运行状态,优化资源的使用,并确保应用的流畅性和稳定性。这个"Android应用源码任务管理器源码"是一个用于毕业设计...

    嵌入式Linux_Android学习路线图,嵌入式linux应用开发完全手册,Shell

    嵌入式Linux与Android开发是当今IT领域中的热门方向,尤其在物联网(IoT)、智能家居、自动驾驶等应用场景中有着广泛的应用。韦东山老师的"嵌入式Linux应用开发完全手册"是许多初学者和进阶者的学习宝典。本文将依据...

    Android 7.1.1源码(Nougat)

    1. **多窗口支持**:Android 7.1.1引入了多窗口模式,允许两个应用同时显示在屏幕上。源码中的`frameworks/base/services/core/java/com/android/server/wm/`目录下包含了与此功能相关的代码,如`MultiWindowPolicy`...

    Android Studio简单课设 及格点餐超简单(过于简单可以应付,需要上难度可以看主页)

    虽然现在Kotlin已经逐渐成为官方推荐的首选语言,但Java在许多项目中仍然广泛使用,尤其对于初学者,Java是一个很好的起点。 【Android Studio项目结构】 一个典型的Android Studio项目包含以下几个关键文件和目录...

Global site tag (gtag.js) - Google Analytics