跳转到已安装的apk&&获取Android应用包名package和入口activity名称

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) {
		final PackageManager packageManager = getPackageManager();
		PackageInfo pi = null;
		try {
			pi = getPackageManager().getPackageInfo(packageName, 0);
		} catch (NameNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(pi == null || pi.packageName == null){
			Toast.makeText(this, "还没安装!", 2000).show();
			return;
		}
		Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
		resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
		resolveIntent.setPackage(pi.packageName);

		List<ResolveInfo> apps = packageManager.queryIntentActivities(resolveIntent, 0);

		ResolveInfo ri = apps.iterator().next();
		if (ri != null) {
			String pkgName = ri.activityInfo.packageName;
			String className = ri.activityInfo.name;

			Intent intent = new Intent(Intent.ACTION_MAIN);
			intent.addCategory(Intent.CATEGORY_LAUNCHER);

			ComponentName cn = new ComponentName(pkgName, className);

			intent.setComponent(cn);
			startActivity(intent);
		}
	}


跳转到新的apk后,点击后退,新的 apk 是退出了,同时也将之前的apk也退出了?

需要在启动时添加一个flag:

Intent intent=new Intent();  
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  intent.setComponent(new ComponentName(objAppClassName, mainActivity)); 
         context.startActivity(intent);

这样做就可以!


获取Android应用包名package和入口activity名称

方法一:使用aapt    //aapt是sdk自带的一个工具,在sdk\builds-tools\目录下

1.以ES文件浏览器为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\apk\es3.apk

2.运行后的结果中以下两行分别是应用包名package和入口activity名称

package: name=’com.estrongs.android.pop’
launchable-activity: name=’com.estrongs.android.pop.view.FileExplorerActivity’

注:在android sdk目录搜索可以找到aapt.exe,如果没有可以下载apktool。

 

方法二:查看AndroidManifest.xml

1.使用apktool反编译app:apktool.bat d es3.apk E:\apk\es

2.打开AndroidManifest.xml

manifest节点的package属性值是应用的包名:<manifest package=”com.estrongs.android.pop”>

查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,如下:

<activity android:theme=”@*android    tyle/Theme.NoTitleBar” android:label=”@string/app_name” android:name=”com.estrongs.android.pop.view.FileExplorerActivity”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>

android.intent.action.MAIN决定应用程序最先启动的Activity

android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的示例代码: 1. 创建一个为 LoginActivityActivity 类,并在其中编写登录界面的布局和逻辑代码。 ```java public class LoginActivity extends AppCompatActivity { private EditText mUsernameEditText; private EditText mPasswordEditText; private Button mLoginButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mUsernameEditText = findViewById(R.id.username_edit_text); mPasswordEditText = findViewById(R.id.password_edit_text); mLoginButton = findViewById(R.id.login_button); mLoginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String username = mUsernameEditText.getText().toString(); String password = mPasswordEditText.getText().toString(); // TODO: 在这里编写登录逻辑代码,验证用户和密码是否正确 // 如果验证通过,则跳转到主界面 Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); } }); } } ``` 2. 在 res/layout 目录下创建一个activity_login.xml 的布局文件,并添加登录界面的 UI 控件。 ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <EditText android:id="@+id/username_edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="用户" /> <EditText android:id="@+id/password_edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="密码" android:inputType="textPassword" /> <Button android:id="@+id/login_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登录" /> </LinearLayout> ``` 3. 创建一个为 MainActivityActivity 类,并在其中编写主界面的布局和逻辑代码。 ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } ``` 4. 在 res/layout 目录下创建一个activity_main.xml 的布局文件,并添加主界面的 UI 控件。 ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登录成功!" android:textSize="24sp" /> </LinearLayout> ``` 5. 在 AndroidManifest.xml 文件中声明 LoginActivity 和 MainActivityActivity。 ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplication"> <application ...> <activity android:name=".LoginActivity" android:label="登录"/> <activity android:name=".MainActivity" android:label="主界面"/> </application> </manifest> ``` 以上就是一个简单的登录界面和 Activity 跳转的实现示例。需要注意的是,这只是一个基础的示例,实际开发中还需要考虑很多其他因素,例如登录验证的安全性、跳转时传递参数等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值