처음으로 포스터를 보내주십시오. 오랜 시간 내 게시물을 남겨주세요. 필요한 모든 정보를 제공하고 싶습니다.android 알림은 항상 활동을 다시 시작합니다.
내가이 기능을 사용하려면 알림 기능을 클릭하는 것이 좋습니다. 그러나 몇 가지 어려움이 있습니다. 첫째, 세부 사항 (아래 코드) OFF : MyApp를는 startService를 통해 MyAppService을 시작
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
프로젝트 속성
- 이 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;
}
나는 모두 포함 희망 충분한 정보 -이 코드가 작동하는지 알아보기 위해 코드를 수정했습니다. - 모든 cas에서 e, 최상위 애플리케이션이 검은 색 화면을 최소화하고 MyApp가 최대화하고 MainActivity.java의 onCreate 함수가 호출됩니다.
MyApp가 이미 최상위에있는 경우 알림 풀다운 만 스크롤하면됩니다.
미리 감사드립니다. 당신은 내가 추측이 달성 할 수 PendingIntent.FLAG_UPDATE_CURRENT
및 Intent.FLAG_ACTIVITY_SINGLE_TOP
플래그를 설정하여
최상위 활동 인 경우 자신의 앱에 대한 알림을받는 것이 좋습니다. 알림은 앱 앞에 다른 것이있을 때 앱과 관련된 정보를 사용자에게 알리기위한 것입니다. 그 활동이 위에있을 때 앱에 대한 알림을 취소하는 것이 좋습니다. – dsandler
아, 또한'startForeground()'도 사용하고 있다면'notify()'를 호출 할 필요가 없습니다. 후자의 전화는 통지를 게시 할 것입니다. – dsandler
안녕하세요 @dsandler, 알림은 실제로'MyAppService.java'에 의해 유지됩니다. 이것은'MyApp'가 시작될 때 시작되는 서비스입니다. – Mark