More Information in FIS/MFA

Search This thread

9_Mad-Max_5

Senior Member
Jan 30, 2015
86
10
Hi all,

I know there was several questions like mine but i didn´t find a thread till now, where somebody did a little bit more investigation.

So I exported my apk from a PX5 device which I think is the key to send and recive informations with the CAN Bus in the Vehicle.
Sadly im not pretty familiar with reverse engeneering with apps or programming Android apps at all.
Maybe there are some better informed people out there making it happen to send more Informations to the display in the car.

Could be something like:
-Phone numbers
-Musik information from foreign players
-RDS information from a station
-Arrows from a Navigation app (i think a lot more difficult but quite nice)
-..
 

Attachments

  • CanBus_android.microntek.canbus.apk
    2.8 MB · Views: 431

folepole

Member
May 9, 2018
5
1
what i found out!

hi!
yes the apk you postet is really the key, but every app in the HeadUnit is Broadcasting(intent) a message to the canbus.apk. so we have do edit the intent filter from the canbus.apk to recive a custom intent from a selfmade app, to show special informations.

but iam not so good to make one.

In the decompiled file of MusicPlayer2.4.1.apk there is a file with the name "MainActivity.java" at line 329 which the app would send an INTENT with the information TIME of the played Track, i would change this to show the TITLE of the song, i have editet but i cant recompiled with serveral tools.
if i decompile and try to compile the original version, this was not possible, i dont know why.

hopefully
 
  • Like
Reactions: 9_Mad-Max_5

9_Mad-Max_5

Senior Member
Jan 30, 2015
86
10
hi!
yes the apk you postet is really the key, but every app in the HeadUnit is Broadcasting(intent) a message to the canbus.apk. so we have do edit the intent filter from the canbus.apk to recive a custom intent from a selfmade app, to show special informations.

but iam not so good to make one.

In the decompiled file of MusicPlayer2.4.1.apk there is a file with the name "MainActivity.java" at line 329 which the app would send an INTENT with the information TIME of the played Track, i would change this to show the TITLE of the song, i have editet but i cant recompiled with serveral tools.
if i decompile and try to compile the original version, this was not possible, i dont know why.

hopefully

How you decompiled the app?
Every way i found you need an classes.dex file.

Would it be possible to recieve the Intent with an app like Automate or Tasker and Transmitt it to the canbus.apk?
 

folepole

Member
May 9, 2018
5
1
tools

hi, nice to hear some other has the same problem!

i have decompiled with javadecompilers.com/apk and tools that i have found on xda-dev. And i editet with nootepad++.

you can easy extract the classes.dex from musikplayer.apk with 7zip or equals.

yes it must possible, but i dont know how.
shematic function of this i imagine:
musicplayer.apk->recive with an selfmade app, read out the toast that musicplayer.apk made, convert it to 2 lines to the FIS format, an send an intent to canbus.apk.

hopefully
 

9_Mad-Max_5

Senior Member
Jan 30, 2015
86
10
So if i get it wright every app needs to send it Information to the canbus.apk?
So we could trigger every app to do so?
 

9_Mad-Max_5

Senior Member
Jan 30, 2015
86
10
hi, nice to hear some other has the same problem!

i have decompiled with javadecompilers.com/apk and tools that i have found on xda-dev. And i editet with nootepad++.

you can easy extract the classes.dex from musikplayer.apk with 7zip or equals.

yes it must possible, but i dont know how.
shematic function of this i imagine:
musicplayer.apk->recive with an selfmade app, read out the toast that musicplayer.apk made, convert it to 2 lines to the FIS format, an send an intent to canbus.apk.

hopefully

Could you show me the MusicApp u used?
 

9_Mad-Max_5

Senior Member
Jan 30, 2015
86
10
Hi,

Im just playing a little bit arround and found this.

Code:
  private void SendCanBusinfo() {
        Intent it1 = new Intent(MSG_MTC_CANBUS_DISPLAY);
        it1.putExtra(MSG_TYPE, "radio");
        it1.putExtra("group", (byte) this.band);
        if (this.band < 3) {
            it1.putExtra("fre", this.currentFreq / 10000);
        } else {
            it1.putExtra("fre", this.currentFreq / 1000);
        }
        it1.putExtra("index", (byte) this.channel);
        sendBroadcast(it1);
    }

It was extracted from an Radio app.
If i get that wright every app could send his Information without any problem to the Canbus app.
So the problem is not to modify the filter in the first step we should try to send the info with additional apps in my mind.
 
  • Like
Reactions: Donnergott3571

9_Mad-Max_5

Senior Member
Jan 30, 2015
86
10
Becasue im not an that good Software Engineer i try to use Automate to make my Plans happen.

MediaPlayer

Intent intent = new Intent("com.microntek.canbusdisplay");
intent.putExtra("type", "music");
intent.putExtra("all", this.ee.size());
intent.putExtra("cur", this.cv + 1);
if (i2 <= 0) {
intent.putExtra("time", 0);
} else {
intent.putExtra("time", i);
}
sendBroadcast(intent);
}

Intent vom Radio

Intent it1 = new Intent(MSG_MTC_CANBUS_DISPLAY);
it1.putExtra(MSG_TYPE, "radio");
it1.putExtra("group", (byte) this.band);
if (this.band < 3) {
it1.putExtra("fre", this.currentFreq / 10000);
} else {
it1.putExtra("fre", this.currentFreq / 1000);
}
it1.putExtra("index", (byte) this.channel);
sendBroadcast(it1);

Use the Boradcast send block.
Action: <whatever MSG_MTC_CANBUS_DISPLAY sands for>
Extras: { "type": "radio", "group" as byte: band, "fre" as int: freq, "index" as byte: channel }

This is where i stand at the moment with the help from Henrik.
 
  • Like
Reactions: folepole

folepole

Member
May 9, 2018
5
1
Becasue im not an that good Software Engineer i try to use Automate to make my Plans happen.

MediaPlayer

Intent intent = new Intent("com.microntek.canbusdisplay");
intent.putExtra("type", "music");
intent.putExtra("all", this.ee.size());
intent.putExtra("cur", this.cv + 1);
if (i2 <= 0) {
intent.putExtra("time", 0);
} else {
intent.putExtra("time", i);
}
sendBroadcast(intent);
}

Intent vom Radio

Intent it1 = new Intent(MSG_MTC_CANBUS_DISPLAY);
it1.putExtra(MSG_TYPE, "radio");
it1.putExtra("group", (byte) this.band);
if (this.band < 3) {
it1.putExtra("fre", this.currentFreq / 10000);
} else {
it1.putExtra("fre", this.currentFreq / 1000);
}
it1.putExtra("index", (byte) this.channel);
sendBroadcast(it1);

Use the Boradcast send block.
Action: <whatever MSG_MTC_CANBUS_DISPLAY sands for>
Extras: { "type": "radio", "group" as byte: band, "fre" as int: freq, "index" as byte: channel }

This is where i stand at the moment with the help from Henrik.

yes this ist nice, i have the same infos, i make a app with android studio they look like this: but it dont work.
this was the manifest from the canbus.apk
Code:
<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="android.uid.system" package="android.microntek.canbus" platformBuildVersionCode="26" platformBuildVersionName="8.0.0">
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.BROADCAST_STICKY"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS"/>
    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>
    <uses-permission android:name="android.permission.SET_TIME_ZONE"/>
    <uses-permission android:name="android.permission.SERIAL_PORT"/>
    <application android:allowBackup="true" android:directBootAware="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:name=".BaseApplication" android:resizeableActivity="false" android:theme="@android:style/Theme.Translucent">
        <receiver android:name=".CanBusReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <action android:name="android.intent.action.LAUNCHER_STARTED"/>
                <action android:name="android.intent.action.USER_INITIALIZE"/>
                <action android:name="android.intent.action.PRE_BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
        <service android:name=".CanBusServer" android:persistent="true">
            <intent-filter>
                <action android:name="com.microntek.canbusserver"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>
        <service android:name=".AirServer">
            <intent-filter>
                <action android:name="com.microntek.AirServer"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>
        <service android:name=".DoorServer">
            <intent-filter>
                <action android:name="com.microntek.DoorServer"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>
        <service android:name=".RadarServer">
            <intent-filter>
                <action android:name="com.microntek.RadarServer"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>
        <service android:name=".Ajxserver">
            <intent-filter>
                <action android:name="com.microntek.ajxService"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>
        <service android:name=".ParkServer">
            <intent-filter>
                <action android:name="com.microntek.ParkServer"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>
        <activity android:excludeFromRecents="true" android:label="@string/carinfo" android:name=".Canbus20Activity" android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="com.microntek.Canbus20Activity"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
        <activity android:excludeFromRecents="true" android:name=".log.CanBusLogActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.Wallpaper.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
        <activity android:excludeFromRecents="true" android:icon="@drawable/ic_air_control" android:label="@string/air_name" android:launchMode="singleTask" android:name=".air.AirControlActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.Wallpaper.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <service android:name=".WarningServer">
            <intent-filter>
                <action android:name="com.microntek.WarningServer"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>
        <service android:name=".update.UpdateService">
            <intent-filter>
                <action android:name="com.microntek.canbus.UpdateService"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>
    </application>
</manifest>
Good but i can read out the filter for the Musicplayer, Radio, A2DP or anything usefull.

android studio: i have make a intent sender, but however my app is sending the intent, the app is crashing.
Code:
package com.track.mfa.test10;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask.Status;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.provider.Settings.System;
import android.view.KeyEvent;
import android.widget.Toast;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void SendOutBroadoff() {
        Intent i = new Intent("com.microntek.canbusdisplay");
        i.putExtra("type", "music-off");
        sendBroadcast(i);
    }

    public void SendOutBroadon() {
        Intent intent = new Intent("com.microntek.canbusdisplay");
        intent.putExtra("type", "music-on");
        sendBroadcast(intent);
    }

    public void SendCustom(){
        Intent intent = new Intent("com.microntek.canbusdisplay");
        intent.putExtra("type", "music");
        intent.putExtra("all", "8");
        intent.putExtra("cur", "test");
        intent.putExtra("time", "mix");
        sendBroadcast(intent);
    }
}

i know that malaysk has the answer, he has editet the musik apk with other people, but i think he has many work with his other projekts.
pleas help us @Malaysk
 

9_Mad-Max_5

Senior Member
Jan 30, 2015
86
10
Actually i get it to work to broadcast en intend to my MFA+.
It was pretty basic but it worked.
After a little bit of playing around with the Infos i became i made this 2 Automate Flos:
Recieve Intent it repetly readst the intents to the Can Bus apk and diplays it as Toast.

And Send Broadcast.
It´s yea lets say dumb but it works.
So it opens the Audio menu and Displays Track 1.
These values are hat coded and won´t change with time.
 

Attachments

  • XDA.zip
    757 bytes · Views: 225
  • Like
Reactions: Ati_gangster

9_Mad-Max_5

Senior Member
Jan 30, 2015
86
10
I was able to unpack the canbus app but not able to found the recieve option.
So here is my upacked version
 

Attachments

  • CanBus_android.microntek.canbus_Unpack.zip
    2.5 MB · Views: 212

Timops

Member
Dec 10, 2007
34
2
Working example

folepole almost got it right. The problem was that he sent strings in his intent. The CanBus app only deals with integers. The following code works (successfully tested in my Mercedes-Benz W211 on a head unit running Hal9k's Android 7.1.2 ROM).

Code:
public void sendCanBusMusicOn()
{
	Log.i("PlaybackService", "sendCanBusMusicOn()");
	Intent canBusDisplayIntent = new Intent("com.microntek.canbusdisplay");
	canBusDisplayIntent.putExtra("type", "music-on");
	sendBroadcast(canBusDisplayIntent);
}

public void sendCanBusMusicOff()
{
	Log.i("PlaybackService", "sendCanBusMusicOff()");
	Intent canBusDisplayIntent = new Intent("com.microntek.canbusdisplay");
	canBusDisplayIntent.putExtra("type", "music-off");
	sendBroadcast(canBusDisplayIntent);
}

/**
 * Sends track information to the CanBus App
 * (to display in car's display)
 */
public void sendCanBusInfo()
{
	String methodTag = "PlaybackService";
	// send intent to "com.microntek.canbusdisplay"
	// "type": "music" (String)
	// "all": number of tracks in playlist / queue (int)
	// "cur": currentPlayIndex, position of current track in playlist (int)
	// "time": either 0 or actual time position in milliseconds (int)

	int numberOfTracksInQueue = getTimelineLength(); // e.g. 241 for playlist with 241 tracks
	int currentPositionInQueue = getTimelinePosition() + 1; // e.g. 5 for 5th track of current playlist
	int currentTimeOffset = getPosition(); // in milliseconds, e.g. 20000 for 00:20

	Intent canBusDisplayIntent = new Intent("com.microntek.canbusdisplay");
	canBusDisplayIntent.putExtra("type", "music");
	canBusDisplayIntent.putExtra("all", numberOfTracksInQueue);
	canBusDisplayIntent.putExtra("cur", currentPositionInQueue);
	canBusDisplayIntent.putExtra("time", currentTimeOffset);

	String hms = String.format("%02d:%02d",
		TimeUnit.MILLISECONDS.toMinutes(currentTimeOffset),
		TimeUnit.MILLISECONDS.toSeconds(currentTimeOffset) % TimeUnit.MINUTES.toSeconds(1));

	String msg = hms + ", " + currentPositionInQueue + "/" + numberOfTracksInQueue;
	Log.i(methodTag, msg);
	sendBroadcast(canBusDisplayIntent);
}

For the order of calling the methods:
  1. You have to call sendCanBusMusicOn() to let the CanBus app know that it shall "enable" the music mode. (At this point, my display already shows 00:00 and not "Audio off" anymore.)
  2. Call sendCanBusInfo() to show the correct information (current position in the playlist and passed mm:ss in the track). I am calling this method every second to update the information shown.
  3. Call sendCanBusMusicOff() to "leave" music mode. I think this step is optional. You can also just switch to the radio app and the current mode is overridden.
To test this, I have used the open-source media player "Vanilla" and added my code inside the "PlaybackService" class. But you can - of course - write custom apps.

I am currently going through the de-odexed source code of the MTCCanBus.apk to get an understanding of how the communication works and to see if it's possible to display strings in the FIS/MFA/Board computer (whatever you want to call it). So far I don't think it can be done easily. There are 76 different implementations of the "Canbus" class. One for every type of canbus adapter, I guess. And I don't even know which one my head unit is set to use. Plus, I'm no Android/Java developer...
But hey, it's a start. :)
 
  • Like
Reactions: C180 and folepole

9_Mad-Max_5

Senior Member
Jan 30, 2015
86
10
Sadly in my display it just shows up Track 1. No infromation about the point in the playlist. But i have no idea how to deal with it. Maybe we can look up in a forum like https://www.canhack.de/ to get more information. But saddly i realy don´t get where the information is handed over to the can bus app.
 

kaise123

Senior Member
Aug 22, 2013
70
38
Adelaide
I would definitely be interested in this. Maybe it's possible to use an Xposed module to do what we need?

It would be nice if it could get track information from apps like Spotify or Google Play Music. Just the name of the song or the position in the playlist would be a nice touch
 

9_Mad-Max_5

Senior Member
Jan 30, 2015
86
10
It is really not the problem to get the information.
I already tested it with simple automate flows.
The bottleneck is to define the way it is send to the bus.

Gesendet von meinem G8341 mit Tapatalk
 

9_Mad-Max_5

Senior Member
Jan 30, 2015
86
10
Hi,

I found some new info.
I attached from xbenji the decompiled apks and the source code for an mixed app.
 

Attachments

  • AHUCanBus-master.zip
    226.9 KB · Views: 190
  • mtccanbus-decompiled-master.zip
    311.9 KB · Views: 151
  • mtccanbus-px5-decompiled-master.zip
    3.1 MB · Views: 249

royalhawk2002

Senior Member
Sep 21, 2008
908
149
Avezzano
I have a 2010 Jeep Grand Cherokee S-Limited 3.0 CRD (Mercedes Engine) with a specific Xtrons PX5 installed. My car has the "Auto Headlight" function and when they are switched on automatically, the illumination on the HU is OFF. If I manually switch On the headlight then the HU illumination is correctly working. It seems that the issue is related to the Can Bus. Probably the "message" on the Bus when the lights are switched on in "Auto" mode is different from the one in "Manual" mode and is not correctly decoded by the HU. Anyone knows if some modifications could be done to make it work also in "Auto" ?
 

Top Liked Posts

  • There are no posts matching your filters.
  • 3
    Hi,
    first of all I expect my situation was quite different than for most of the others here. In march I got my new Hyundai I30 PDE. Is I was using a Android HU before inside a Audi 8 PA I wanted to got this way also with the new car. But all the Android HU for this specific car do not deliver any canbus controller which is probably OK for some configurations. I connected the HU and everything was working perfectly beside of the reverse camera. I have learned inside my car reverse camera is switched on by the HU based on canbus messages, no wires.

    I started to sniff the canbus messages and could isolate the one responsible for switching to reverse mode. Opened the canbus adapter from my old Android HU and found it is using a STM32 and could also identify the pins for flashing. I started to develop my own software for the canbus adapter and now I was able to switch the Android HU to reverse mode.

    After this was working I decide it would be nice to have the current time somewhere to be displayed inside FIS/MFA. If you sniff serial communication between HU and canbus adapter and and as canbus controller "22 AUDI_A3_A4(Simple) it is simple. In Radio Mode you can see the frequency and USB Mode you will see the time. Wrote a little program which sends intends containing the current time and I was able to receive this with my own software inside the canbus decoder to translate it to something like KM to be displayed.

    Later on I decided it would be nice to be able to show further informations. So decided to use a bluetooth serial adapter for connection between HU and canbus decoder. Currently I would be able to display text and also some data from the google maps notifications based on my own little android program. Even if I know how to display direction signs inside FIS/MFA I was not able to extract this information from the google maps notifications.

    To make a long story short:
    If you would like to display data currently not available it might by a good idea to implement your own canbus decoder based on arduino, stm32 bluepill board or something like this.
    If you implement this on your own you have to learn which canbus messages have to be send/received. There exist no standard and even between different cars of the same brand there might be differences.
    There might be limitations in the FIS/MFA.

    Most people would like to show some google maps data, so you might could start if there exists anything your current setup is able to display inside MFA/FIS which is not based on some sort of number. Maybe at least it shows radio name or a song title. I would be surprised if some like this would exist in combination with our Android HUs.

    Ciao
    PS: for development I am using a instrument cluster/android HU on my desk.
    3
    Hi,

    I found some new info.
    I attached from xbenji the decompiled apks and the source code for an mixed app.
    2
    Working example

    folepole almost got it right. The problem was that he sent strings in his intent. The CanBus app only deals with integers. The following code works (successfully tested in my Mercedes-Benz W211 on a head unit running Hal9k's Android 7.1.2 ROM).

    Code:
    public void sendCanBusMusicOn()
    {
    	Log.i("PlaybackService", "sendCanBusMusicOn()");
    	Intent canBusDisplayIntent = new Intent("com.microntek.canbusdisplay");
    	canBusDisplayIntent.putExtra("type", "music-on");
    	sendBroadcast(canBusDisplayIntent);
    }
    
    public void sendCanBusMusicOff()
    {
    	Log.i("PlaybackService", "sendCanBusMusicOff()");
    	Intent canBusDisplayIntent = new Intent("com.microntek.canbusdisplay");
    	canBusDisplayIntent.putExtra("type", "music-off");
    	sendBroadcast(canBusDisplayIntent);
    }
    
    /**
     * Sends track information to the CanBus App
     * (to display in car's display)
     */
    public void sendCanBusInfo()
    {
    	String methodTag = "PlaybackService";
    	// send intent to "com.microntek.canbusdisplay"
    	// "type": "music" (String)
    	// "all": number of tracks in playlist / queue (int)
    	// "cur": currentPlayIndex, position of current track in playlist (int)
    	// "time": either 0 or actual time position in milliseconds (int)
    
    	int numberOfTracksInQueue = getTimelineLength(); // e.g. 241 for playlist with 241 tracks
    	int currentPositionInQueue = getTimelinePosition() + 1; // e.g. 5 for 5th track of current playlist
    	int currentTimeOffset = getPosition(); // in milliseconds, e.g. 20000 for 00:20
    
    	Intent canBusDisplayIntent = new Intent("com.microntek.canbusdisplay");
    	canBusDisplayIntent.putExtra("type", "music");
    	canBusDisplayIntent.putExtra("all", numberOfTracksInQueue);
    	canBusDisplayIntent.putExtra("cur", currentPositionInQueue);
    	canBusDisplayIntent.putExtra("time", currentTimeOffset);
    
    	String hms = String.format("%02d:%02d",
    		TimeUnit.MILLISECONDS.toMinutes(currentTimeOffset),
    		TimeUnit.MILLISECONDS.toSeconds(currentTimeOffset) % TimeUnit.MINUTES.toSeconds(1));
    
    	String msg = hms + ", " + currentPositionInQueue + "/" + numberOfTracksInQueue;
    	Log.i(methodTag, msg);
    	sendBroadcast(canBusDisplayIntent);
    }

    For the order of calling the methods:
    1. You have to call sendCanBusMusicOn() to let the CanBus app know that it shall "enable" the music mode. (At this point, my display already shows 00:00 and not "Audio off" anymore.)
    2. Call sendCanBusInfo() to show the correct information (current position in the playlist and passed mm:ss in the track). I am calling this method every second to update the information shown.
    3. Call sendCanBusMusicOff() to "leave" music mode. I think this step is optional. You can also just switch to the radio app and the current mode is overridden.
    To test this, I have used the open-source media player "Vanilla" and added my code inside the "PlaybackService" class. But you can - of course - write custom apps.

    I am currently going through the de-odexed source code of the MTCCanBus.apk to get an understanding of how the communication works and to see if it's possible to display strings in the FIS/MFA/Board computer (whatever you want to call it). So far I don't think it can be done easily. There are 76 different implementations of the "Canbus" class. One for every type of canbus adapter, I guess. And I don't even know which one my head unit is set to use. Plus, I'm no Android/Java developer...
    But hey, it's a start. :)
    1
    what i found out!

    hi!
    yes the apk you postet is really the key, but every app in the HeadUnit is Broadcasting(intent) a message to the canbus.apk. so we have do edit the intent filter from the canbus.apk to recive a custom intent from a selfmade app, to show special informations.

    but iam not so good to make one.

    In the decompiled file of MusicPlayer2.4.1.apk there is a file with the name "MainActivity.java" at line 329 which the app would send an INTENT with the information TIME of the played Track, i would change this to show the TITLE of the song, i have editet but i cant recompiled with serveral tools.
    if i decompile and try to compile the original version, this was not possible, i dont know why.

    hopefully
    1
    Hi,

    Im just playing a little bit arround and found this.

    Code:
      private void SendCanBusinfo() {
            Intent it1 = new Intent(MSG_MTC_CANBUS_DISPLAY);
            it1.putExtra(MSG_TYPE, "radio");
            it1.putExtra("group", (byte) this.band);
            if (this.band < 3) {
                it1.putExtra("fre", this.currentFreq / 10000);
            } else {
                it1.putExtra("fre", this.currentFreq / 1000);
            }
            it1.putExtra("index", (byte) this.channel);
            sendBroadcast(it1);
        }

    It was extracted from an Radio app.
    If i get that wright every app could send his Information without any problem to the Canbus app.
    So the problem is not to modify the filter in the first step we should try to send the info with additional apps in my mind.