There's the usual issues: Does the app have proper permissions? Does it have the intent filters set up correctly?
Next, there is the fact that your method is contrary to the whole security design of Android. Each app gets a private little virtual machine. Unless specified otherwise, you get one process. Stray processes can be killed by the OS without notice. Calls to system() cause many such things to potentially happen. A few moments searching the Android development groups show this random stray-process reaping as the cause of many crashes.
The right way to do it is use JNI to start your Intent. The NDK does not provide a way to do it. Again per the Android group forums, the dev teams know about the omission from the NDK and have no plans to introduce methods to do it.