I've been researching on how to create custom-layout notification using RemoteView
.
So far, I am able to create a notification with contentView
and bigContentView
pointing to a RemoteView
with a custom layout xml. However, what does not happen, is to have Activity
(associated with custom layout) started when this RemoteView
is created.
I've double checked and in my layout xml, it appears to have correct Activity
class name:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="0dp"
tools:context=".LLMNotificationActivity" >
..... the rest are standard layout items: images, buttons and text
</RelativeLayout>
In manifest file, right after main application main activity, notification activity is also added:
<activity
android:name=".LLMNotificationActivity"
android:label="@string/app_name">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
I would expect when notification uses RemoteView
for its content, that this RemoteView
will launch activity that is attached to its layout definition. However it appears not.
Here is how I create a notification in main application Activity
:
protected void startNoti() {
if( noti!=null ) return;
Context context = getApplicationContext();
RemoteViews contentView = new RemoteViews(context.getPackageName(),R.layout.activity_noti1);
Notification.Builder notibuilder = new Notification.Builder(context);
notibuilder.setContentTitle(" ");
notibuilder.setContentText(" ");
notibuilder.setSmallIcon(R.drawable.ic_launcher);
notibuilder.setOngoing(true);
manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
noti = notibuilder.build();
noti.contentView = contentView;
manager.notify(NOTIFICATION_ID, noti);
}
LLMNotificationActivity
activity class is defined as usual:
public class LLMNotificationActivity extends Activity {
.... etc.... constructor, some button on-click handlers, nothing spectacular...
}
Can anyone point to me what I am missing or if I have misunderstood what RemoteView
can do? My understanding is that RemoteView
should, once created, invoke activity associated with its layout. Or - is there some API I've missed that explicitly can set intent of the RemoteView
?
What I have found so far are only setting content Intent
which basically just launches an Activity
once user touches notification. What I'm looking for is to handle touches to some of UI elements inside custom-layout notification, not to launch an Activity
regardless where the user clicks on notification surface.
For example, if I have 3 icons (i.e. ImageView
) in a RemoteView
which notification uses, I'd like to be able to handle touch on each one of them. I can't imagine this wouldn't be possible as if it's not, what's the point of having RemoteView
in notification?