如何在没有“android.intent.category.LAUNCHER”的情况下启动Android应用程序

时间:2011-09-14 09:45:18

标签: android

我想知道如何在不使用

的情况下发布Android app
  

android.intent.category.LAUNCHER

这是我的AndroidManifest.xml

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

如果删除第3行,该应用将不会在启动器中。问题是:我在哪里以及如何以其他方式启动此应用程序?

4 个答案:

答案 0 :(得分:8)

您需要使用BroadcastReceiver

public class SafetyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        ActivityManager as = (ActivityManager) context
                .getSystemService(Activity.ACTIVITY_SERVICE);
        if (IsNavigationRunning(as)) {
            Intent i = new Intent(context, VoiceActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
}

清单:

<application
    android:icon="@drawable/fot"
    android:label="@string/app_name" >
    <activity
        android:name="com.Safety.VoiceActivity"
        android:launchMode="singleTop"
        android:theme="@style/Theme.CompletelyTransparentWindow" >
    </activity>
    <receiver
        android:name="com.Safety.SafetyReceiver"
        android:process=":goodprocess" >
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
</application>

这是一个在收到文本时开始的例子。

答案 1 :(得分:1)

如果您想要启动自定义活动(例如按下按钮:

),这样会更好
Button btn = (Button)findViewById(R.id.xBtn);

btn.setOnClickListener(new OnClickListener() {
@Override
            public void onClick(View v)
            {
                    Intent intent = new Intent("it.prassel.vimsmediaplayer");
                    intent.setComponent(ComponentName
                        .unflattenFromString("it.prassel.vimsmediaplayer/it.prassel.vimsmediaplayer.MainActivity"));
                    intent.addCategory("android.intent.category.LAUNCHER");
                    startActivity(intent);
             }
});

这是与您的自定义活动相关联的清单:

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

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


    <uses-feature android:glEsVersion="0x00020000" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="it.prassel.vimsmediaplayer.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="it.prassel.vimsmediaplayer" />
            </intent-filter>
        </activity>
    </application>

</manifest>

其中

Intent intent = new Intent("it.prassel.vimsmediaplayer");

对应于

<action android:name="it.prassel.vimsmediaplayer" />

intent.setComponent(ComponentName
                        .unflattenFromString("it.prassel.vimsmediaplayer/it.prassel.vimsmediaplayer.MainActivity"))

对应2行

package="it.prassel.vimsmediaplayer"  the part before /
android:name="it.prassel.vimsmediaplayer.MainActivity" the part after /

您的自定义活动既不会出现在菜单中,也不会出现在最近的应用中,它将完全是匿名的。请注意,如果您希望成为唯一可以使用您的应用程序的人,请为intent-filter提供有意义的名称

答案 2 :(得分:0)

  

我想知道如何在没有的情况下启动Android应用:android.intent.category.LAUNCHER

在Android中,活动应由Intent启动。 Intent可以使用startActivity(Intent myIntent)启动一个Activity,例如:

Intent myIntent= new Intent(context, target_class.class);
                    myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(myIntent);

您必须更换&#34; myIntent&#34;,&#34; context&#34; (通常是&#34;这&#34;)和&#34; target_class&#34;使用您的变量,以使其工作。 因此,无论何时需要您的活动,请调用Intent,操作系统将解析活动

答案 3 :(得分:-1)

您可以在班级中指定。 例如,单击您想要进入某个活动的按钮。所以只需编写此代码:

Button btn = (Button)findViewById(R.id.xBtn);

btn.setOnClickListener(new OnClickListener() {

         public void onClick(View v) {
          Intent intnt = new Intent();
          intnt.setAction(android.intent.action.MAIN);
          intnt.setCategory(android.intent.category.LAUNCHER);
          startActivity(intnt);
         }
        });