【问题标题】:How to start an Intent for an Application Context如何为应用程序上下文启动 Intent
【发布时间】:2016-07-15 09:21:26
【问题描述】:

我发现几乎相同的问题:How to start an Intent if context is not Activity Context but Application Context

但我在使用https://stackoverflow.com/a/9238105/6593395时没有做到这一点

public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if ("android.intent.action.BOOT_COMPLETED".equals(action)) {
        Intent applicationIntent = new Intent(context, myCamApplication.class);
        applicationIntent.setAction(myCamApplication.class.getName());
        applicationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(applicationIntent);

错误日志:

Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.fenchtose.asyncamera/com.eason.mycamera.myCamApplication}; have you declared this activity in your AndroidManifest.xml?

我已将此 myCamApplication 类注册为我在 AndroidManifest.xml 中的应用程序类

    <application
    android:name=".myCamApplication"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    >
    <receiver
        android:name=".BootComplete"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    <activity
        android:name=".myCam"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

那么,有人可以帮忙吗?

【问题讨论】:

  • 你能包含你的代码吗?这样会更容易帮助你
  • 您是否在 AndroidManifest.xml 中声明了此活动?
  • @Christopher 是的,我已经包含了 AndroidManifest.xml
  • @Marat 请看一下,谢谢
  • 新意图(上下文,myCamApplication.class);错了,这里需要提供Activity类

标签: android android-intent android-context


【解决方案1】:

您无法启动应用程序类。您只能启动一个 Activity。

更改您的代码,例如:

Intent applicationIntent = new Intent(context, myCamApplication.class);

Intent applicationIntent = new Intent(context, myCam.class);

【讨论】:

  • 我不确定这是否可能,这里有一个类似的问题:stackoverflow.com/questions/9237448/…
  • 我不确定,你想达到什么目的?无法通过 startActivity 启动应用程序类!
  • 启动完成后,我只想在应用程序的构造器中执行一次操作
  • 我认为应用程序类已经实例化,如果您的 BroadcastReceiver 收到消息?否则你不会有上下文实例,或者没有?
【解决方案2】:

尝试创建另一个Activity并将其添加到您的Manifest.xml,看看是否有任何错误不要忘记添加此代码&lt;activity android:name=".yourSecondActivity" /&gt;并开始一个新的Intent

【讨论】:

  • 我可以通过 context.startActivity 成功启动一个活动上下文。但不能为应用程序类做到这一点
  • 你用过Intent intent = new Intent(MainActivity.this, yourSecondActivity.class);MainActivity.this.startActivity(intent);???
  • 我已经附上代码了,请看一下,谢谢
【解决方案3】:

这里的问题是您不了解基本原理。在android中你只有4个组件:Activity、Service、ContentProvider、BroadcastReceiver。因此,在您的清单中,您声明您拥有应用程序(名称、属性...),并且在应用程序内部您拥有活动、服务、接收器、内容提供者。

您的应用程序不是您的应用程序类。因此,要启动您的应用程序,您应该启动默认活动:

Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//because we use Application context
startActivity(intent);

附:您的应用程序类将自动启动。应用程序的生命周期如下: 应用程序类的开始 -> 组件的开始(服务,活动..) -> 组件的停止(服务...) -> 应用程序类的停止

附言 无需检查 onReceive 中的操作 - 唯一的原因是:

<intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>

【讨论】:

    猜你喜欢
    • 2012-03-03
    • 2019-11-07
    • 2019-07-22
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 2012-06-17
    相关资源
    最近更新 更多