【问题标题】:Unable to start receiver (Activity Not Found)无法启动接收器(未找到活动)
【发布时间】:2017-09-12 10:12:05
【问题描述】:

我开发了一个应用程序并将其放在应用商店。后记我想更改包名称,所以我只是更改了 build.gradle 中的应用程序 ID,以便它在链接中看起来合适。我没有更改任何其他东西,不是包名称,不是清单文件等。应用程序运行良好,但现在它在通过广播接收器调用的启动器活动上显示 ActivityNotFound 异常 错误,尽管那活动在清单文件中定义。我可以知道我错在哪里吗? 这是清单文件编码:

<receiver android:name=".PowerConnectionReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>

<activity
android:name=".BatteryChargerFast"
android:configChanges="orientation"
android:screenOrientation="portrait"
android:label="@string/app_name"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

下面是广播接收器的编码:

public class PowerConnectionReceiver extends BroadcastReceiver {
private String TAG="PowerConnectionReceiver";

@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent();
i.setClassName("packagename", 
"packagename.BatteryChargerFast");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("fast", true);
context.startActivity(i);
}
}

错误状态:

java.lang.RuntimeException: 无法启动接收器 包名.PowerConnectionReceiver: android.content.ActivityNotFoundException:找不到显式 活动类 {packagename/packagename.BatteryChargerFast};你 在你的 AndroidManifest.xml 中声明了这个活动?

【问题讨论】:

  • 因为在 gradle 中更改 applicationId 时,它会覆盖 Manifest 的 id。我不确定,但您应该尝试以下操作以查看它是否有效: i.setClassName("YourNewApplicationId", "packagename.BatteryChargerFast");或:i.setClassName("YourNewApplicationId", "YourNewApplicationId.BatteryChargerFast");
  • @sam_0829 好吧,让我这样编辑

标签: java android broadcastreceiver development-environment


【解决方案1】:

当您在 gradle 中更改 applicationId 时,它会覆盖 Manifest 的 id。 所以你需要改变你的代码:

Intent i = new Intent();
i.setClassName("packagename", 
"packagename.BatteryChargerFast");

收件人:

Intent i = new Intent();
    i.setClassName("your.new.app.id", 
    "packagename.BatteryChargerFast");

或者在您不需要考虑所有这些的地方可能更简单:

@Override
public void onReceive(Context context, Intent intent) {
    Intent i = new Intent(context.getApplicationContext(), BatteryChargerFast.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.putExtra("fast", true);
    context.startActivity(i);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 2016-02-24
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    相关资源
    最近更新 更多