0

ここに初めて投稿します。長い投稿をお許しください。必要な情報をすべて提供したいと思います。

通知機能をクリックして切望された履歴書を取得しようとしていますが、いくつかの問題があります。まず、詳細(以下のコード):

  1. プロジェクトのプロパティ

    Android Developer Tools Build: v21.1.0-569685
    Project Build Target : 4.2.2
    Platofrm : 4.2.2
    API Level : 17
    SDK Target : 17
    SDK min : 14
    
    Android Device Chooser : Android Device : Nexus 4 
    
  2. MyAppは、startService を介してMyAppServiceを起動します
  3. MyAppServiceの onStartCommand 関数は、 NotificationCompat.Builder オブジェクトを使用してプルダウン通知にバーを作成します。

私が達成しようとしている動作:

  1. 通知バーのエントリでアプリを起動します (例: メール)
  2. MyApp を開始します (これにより、MyAppService も開始されます)
  3. 通知バーをプルダウンして MyAppService を選択します (はい、MyApp は現在画面に表示されています)
  4. 通知バーは何もせずにロールアップする必要があります

私が気づいているのは、MyApp が最小化され、MyApp の新しいインスタンスが最大化されることです (アプリの起動時と同様の遷移)。メールアプリが一番上にあるときに MyAppService を選択すると、この動作が予想されます(メールアプリを最小化し、MyApp を最大化します)。

多くのコード スニペットと提案がありましたが、動作させることができないようです。ここに私のファイルの内容があります:

AndroidManifest.xml

<application
    android:allowBackup="true"
    android:icon="@drawable/eyeview"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <activity
        android:name="com.example.MyApp.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>

    <service
        android:name=".service.MyAppService"
        android:label="MyAppService">
    </service>
</application>

MyApp/MainActivity.java

public static Intent serviceIntent;
public static Messenger clientMessenger;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstance);

    if (getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT)
    {
        finish();
        return;
    }

    setContentView(R.layout.activity_main);

    ...
    [stuff specific to app, like setting up Fragments]
    ...

    MainActivity.serviceIntent = new Intent(this, MyAppService.class);
    MainActivity.serviceIntent.putExtra("clientMessenger", clientMessenger);
    startService(MainActivity.serviceIntent);
}

MyAppService.java

@Override
private int onStartCommand(Intent intent, int flags, int startId)
{
    NotificationCompat.Builder ncB = new NotificationCompat.Builder(getApplicationContext())
        .setSmallIcon(R.drawable.icon_app)
        .setContentTitle("MyAppService")
        .setSmallIcon(R.drawable.app);

    ncB.setContentText("Click to start MyApp");

    Intent nIntent = new Intent(getApplicationContext(), MainActivity.class);
    nIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    nIntent.setAction(Intent.ACTION_MAIN);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(getApplicationContext());
    stackBuilder.addNextIntent(nIntent);
    PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

    notificationBuilder.setContentIntent(resultPendingIntent);
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    int nId = 1;
    Notification notification = ncB.build();
    notification.flags = Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR;

    notificationManager.notify(nId, notification); 

    sendMessengerToClient(intent);

    startForeground(nId, ncB.build());

    return Service.START_NOT_STICKY;
}

十分な情報がすべて含まれていることを願っています-SOから取得したコードを微調整して、これが機能するかどうかを確認しました-常に、最上位のアプリケーションが最小化されて黒い画面になり、MyAppが最大化され、MainActivity.javaのonCreate関数が呼び出されます。

MyApp が既に一番上にある場合は、通知プルダウンを上にスクロールしたいだけです。

前もって感謝します!

4

2 に答える 2

4
Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
    notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pendingIntent);

PendingIntent.FLAG_UPDATE_CURRENTフラグを設定することでIntent.FLAG_ACTIVITY_SINGLE_TOP、これを達成できると思います。すでに実行されている場合、アクティビティは作成されません。

于 2013-05-10T13:03:09.983 に答える
2

私の場合、シャシカの答えはうまくいきましたが、奇妙な方法でした. 電話を再起動する必要がありました。:)

于 2015-05-14T09:35:53.313 に答える