2

我无法重新启动由PendingIntent.

“无法重新启动”意味着什么,例如,当关于活动已经运行时,永远不会调用onCreateonNewIntent 。startActivity()

名为 MainActivity 我无法重新启动的 Activity 是 singleTop并覆盖onNewIntent

以下是关于MainActivity

 <activity
            android:name="com.example.MainActivity"
            android:label="@string/app_name" 
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

首先,它MainActivity是由具有未决意图的通知启动的。

我的 PendingIntent 是:

Intent iS = new Intent(this,MainActivity.class);
iS.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendindIntent pi = PendingIntent.getActivity(this, 0, iS, 
PendingIntent.FLAG_UPDATE_CURRENT);

MainActivity执行startService(),服务执行sendBroadcast(),广播类执行startActivity(Intent(this,MainActivity.class))

Jere 是 BroadcastClass:

public void onReceive(Context context, Intent intent) {
    Intent i = new Intent(context,MainActivity.class);

    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}

然后onNewIntent()是......永远不会被调用onCreate()

但是,当通过在 homeScreen 上按下图标启动程序时,onNewIntentinMainActivity被同一流程调用。

编辑: onNewIntent 在这里。

protected void onNewIntent(Intent intent) {  
   Log.d("onNewIntent","onNewIntent");
   String SOMETHING = intent.getStringExtra("SOMETHING");

    LinearLayout ll = (LinearLayout)findViewById(R.id.ll2);
    ll.removeAllViews();
    TextView textview1 = (TextView)getLayoutInflater().inflate(R.layout.textview, null);

    textview1.setText(SOMETHING);
    ll.addView(textview1);
}

“onNewIntent”没有出现在 LogCat 上。

4

2 回答 2

2

这是Android 中的一个错误见此。

问题是Android中决定是否调用的代码onNewIntent()是使用中的标志Intent而不是检查清单中的标志。

您应该能够通过Intent.FLAG_ACTIVITY_SINGLE_TOP在从广播接收器启动活动时添加来解决此问题,如下所示:

public void onReceive(Context context, Intent intent) {
    Intent i = new Intent(context,MainActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
    context.startActivity(i);
}

如果您在 google 代码上加注星标并评论这些问题,也会有所帮助。如果我们发出足够多的噪音,这可能会在 2020 年之前得到解决;-)

于 2013-05-14T16:45:45.647 回答
0

就我而言,我仅在重新启动后遇到了这个问题。很高兴知道为什么。为了让我PendingIntent的 s 在重启后工作,我在其Intent自身上添加了以下标志:

Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP

PendingIntent.FLAG_CANCEL_CURRENT对于PendingIntent. 这种行为很奇怪,因为在设备重新启动之前,未决意图可以正常工作。

于 2019-04-15T17:36:29.650 回答