ここに初めて投稿します。長い投稿をお許しください。必要な情報をすべて提供したいと思います。
通知機能をクリックして切望された履歴書を取得しようとしていますが、いくつかの問題があります。まず、詳細(以下のコード):
プロジェクトのプロパティ
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
- MyAppは、startService を介してMyAppServiceを起動します
- MyAppServiceの onStartCommand 関数は、 NotificationCompat.Builder オブジェクトを使用してプルダウン通知にバーを作成します。
私が達成しようとしている動作:
- 通知バーのエントリでアプリを起動します (例: メール)
- MyApp を開始します (これにより、MyAppService も開始されます)
- 通知バーをプルダウンして MyAppService を選択します (はい、MyApp は現在画面に表示されています)
- 通知バーは何もせずにロールアップする必要があります
私が気づいているのは、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 が既に一番上にある場合は、通知プルダウンを上にスクロールしたいだけです。
前もって感謝します!