如何从Android中的另一个应用程序打开一个应用程序?

时间:2016-05-16 03:03:30

标签: android

我有一个名为“App”的应用程序和另一个名为“App1”的应用程序,当我点击该按钮时我在“App”中有一个按钮我要打开“App1”,为此我使用了Intent但是它没有打开“App1”。请帮忙

这是我在“App”中的按钮代码: -

protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.app);
    init();
}
public void init(){
    mTranslucentBtn = (Button) findViewById(R.id.button);
    mTranslucentBtn.setAlpha(0.7f);
    mTranslucentBtn.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v){//calling an activity using <intent-filter> action name
            startNewActivity(MainActivity.this,"com.example.devui1.rewardapp");

        }
    });
}
public void startNewActivity(Context context, String packageName) {
    Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
    if (intent == null) {
        // Bring user to the market or let them choose an app?
        intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("market://details?id=" + packageName));
    }
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}

1 个答案:

答案 0 :(得分:0)

为了使getLaunchIntentForPackage()起作用,该程序包需要有一个适合作为该应用程序入口点启动的Activity。文档包括:

  

当前实现首先查看CATEGORY_INFO类别中的主要活动,然后查看CATEGORY_LAUNCHER类别中的主要活动。如果两者都找不到,则返回null。

这表明您需要在其他程序包中的Activity上执行以下操作之一:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.INFO" />
</intent-filter>

或者

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

如果这不是您想要的,那么您可以尝试创建自己的自定义操作字符串,并使用它来启动公开该特定操作的活动:

<intent-filter>
    <action android:name="your.package.ACTION_NAME" />
</intent-filter>

public void startActivityWithPrivateAction(Context context, String packageName) {
    Intent intent = new Intent("your.package.ACTION_NAME");
    intent.setPackage(packageName);
    List<ResolveInfo> activities = context.getPackageManager().queryIntentActivities(intent, 0);
    if (activities.isEmpty() {
        // no suitable activity was found; open the market instead.
        intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("market://details?id=" + packageName));
    }
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}