Understanding hooking inside out. - Xposed Framework Development

Hi,
I am struggling with some fundamental understanding of how hooking works.
So I am trying to hook every HTTPS call made by any app on the device and then play around with the results.
My approach has been to hook into the openConnection() of java.net.URL class.
1.The question is :
Is there a better approach to do so ? I was thinking about hooking the connect() itself, but some apps may not use it and instead use getInputStream() or may be something else. I am not able to figure out if these use connect() as well internally. In case say they don't how can I hook 2 methods, that is connect() and getInputStream() at the same time ?
Now since openConnection() does not really open a connection, rather just creates a connection object, I use HttpsURLConnection object to call the connect() explicitly in my code as :
Code:
HttpsURLConnection httpsObj = (HttpsURLConnection) param.getResult();
httpsObj.connect();
Now that the connection is made I can play around with httpsObj object.
Now the situation is, before httpsObj.disconnect() gets called to release the resource, some other app or the same other component of the same app (say crashlytics etc.) makes another call to openConnection( ) and since I have hooked this method, my control flow goes back to the afterHookedMethod().
2. The question is :
When the above happens, do I get a separate/different httpsObj variable for this hooked method (much like how one would get a different set of local variables in case of recursive function calls for each recursive call) ?
3. If the above is the case, how can I (that is if it can be done) make sure that before leaving the current flow the disconnect() gets called ?

Related

How to debug device or carrier bugs?

Hi,
I am experiencing a serious problem. I recently released an updated on my app "Funny Jokes" from modern creation. The update is meant to enhance the user experience by adding a few new cool features. However, since the update, there are a small number of users experiencing "Initialization Failure" when starting the app. According to my code, this error only happens when the internet connection is spotty. However, the users report that they have perfect good 3g or wifi. I have no idea what causes this error since it works perfectly fine on my own phone, the simulator and a few friends who have installed my app. However, since angry customers tend to leave reviews, the reviews since the update have been mostly negative. Its really hurting my app. Is there any way that Microsoft can help me debug this problem? since I don't have all the devices on all different carriers? I really don't know what to do at the moment.
Also can some of the developers help me on this problem? I am here attaching the xap file, will you please let me know if the app works on your phone and if it doesn't, can you please let me know what device you use, your carrier, and country. Thanks very much.
Works fine for me (Samsung Focus, HTC Surround, both ATT), no errors at all. BTW, you may check proper handling of advertising control (try-catch, check if null etc.)
P.S. As for your app design: you definitely should add an option to change text size! Default font is too small...
Also, button or item "Instant joke" (randomly selected but of course not repeated!) will be great.
Hi, sensboston,
Thanks for your help and suggestions. I will implement the two suggestions in the following updates. Are you from Boston area? Really appreciate your input. I am really bothered by some users not able to open the app correctly. I really want to help them, but don't know how.
Hi,
Looking at your code I think your real question is "Why is my Azure odata connection / query failing for some users"?
Do you know if it is *always* failing for those users - i.e. every single time - or does it occasionally happen?
If it's *always* failing for certain users:
- It may not be a connection error that your code is detecting, perhaps the error could also be a problem with the query you're issuing. I notice you dynamically build it in the LoadMessages() method (on the string.format line) using App.LastMessageID; is it possible that certain values will cause an invalid query? Is it possible for them to become corrupt, *or null*, etc. for some users? Write some code in to check they are valid values before using them (and use defaults if they are null or invalid) - i.e. just before the string.format line. A null won't cause string.format to fall over, but it will mess up your query.
- I see you are storing LastMessageID in IsolatedStorage on the phone - this makes me wonder if the settings from a previous version of the app are confusing the current version, or if it's become corrupt some other way. Remember that issuing an update to an app does not reset the application's settings (e.g. IsolatedStorage) back to defaults. E.g. Is there a scenario where for certain users since the update their App.LastMessageID has become null or set to an invalid value? It's an easy one to miss because the emulator always starts 'fresh', and when you ask friends to test it's usually just on the latest version (they might not have installed it over a previous version). Again, check your values before the string.format line for nulls or validity.
If it's occasionally failing:
- Your code isn't handling the fact well enough that Internet connections can drop at *any* moment - even for a micro-second - and users won't necessarily notice that (and tell you their signal was fine). Code always needs to handle that kind of eventuality any time you make a connection to a web service (such as Azure). At the moment you are just outputting a message box message and then just letting the app do nothing else which will frustrate users - you could instead have a screen with a 'retry' button, and maybe even something that will send/email you an error report if it keeps happening (you could include the error's message and inner exception etc.).
- It may be that Azure is returning an occasional error - even the best databases get occasional temporary errors for a variety of reasons (too many users, internal connection error,...). You need to detect and handle that in the same way as internet connection errors.
I don't think it's to do with carriers or phone type unless they are blocking access to the azure url / ports you are using - that sounds pretty unlikely as Azure is such a well known service, especially on WP7.
Just as a final thing (maybe not important) your code's logic doesn't handle the scenario of 'no error is returned but at the same time 0 messages are returned' and same for 0 categories (perhaps this isn't possible).
Hope that helps, and best of luck fixing it.
Ian
otherworld said:
Hi,
Looking at your code I think your real question is "Why is my Azure odata connection / query failing for some users"?
Do you know if it is *always* failing for those users - i.e. every single time - or does it occasionally happen?
If it's *always* failing for certain users:
- It may not be a connection error that your code is detecting in the completed event - perhaps the error could also be a problem with the query you're issuing. I notice you dynamically build it (on the string.format line) using App.LastMessageID; is it possible that certain values will cause an invalid query? Is it possible for them to become corrupt, *or null*, etc. for some users? Write some code in to check they are valid values before using them (and use defaults if they are null or invalid) - i.e. just before the string.format line. A null won't cause string.format to fall over, but it will mess up your query.
- I see you are storing LastMessageID in IsolatedStorage on the phone - this makes me wonder if the settings from a previous version of the app are confusing the current version, or if it's become corrupt some other way. Remember that issuing an update to an app does not reset the application's settings (e.g. IsolatedStorage) back to defaults. E.g. Is there a scenario where for certain users since the update their App.LastMessageID has become null or set to an invalid value? It's an easy one to miss because the emulator always starts 'fresh', and when you ask friends to test it's usually just on the latest version (they might not have installed it over a previous version). Again, check your values before the string.format line for nulls or validity.
If it's occasionally failing:
- Your code isn't handling the fact well enough that Internet connections can drop at *any* moment - even for a micro-second - and users won't necessarily notice that (and tell you their signal was fine). Code always needs to handle that kind of eventuality any time you make a connection to a web service (such as Azure). At the moment you are just outputting a message box message and then just letting the app do nothing else which will frustrate users - you could instead have a screen with a 'retry' button, and maybe even something that will send/email you an error report if it keeps happening (you could include the error's message and inner exception etc.).
- It may be that Azure is returning an occasional error - even the best databases get occasional temporary errors for a variety of reasons (too many users, internal connection error,...). You need to detect and handle that in the same way as internet connection errors.
I don't think it's to do with carriers or phone type unless they are blocking access to the azure url / ports you are using - that sounds pretty unlikely as Azure is such a well known service, especially on WP7.
Just as a final thing (maybe not important) your code's logic doesn't handle the scenario of 'no error is returned and at the same time 0 categories are returned' (perhaps this isn't possible).
Hope that helps, and best of luck fixing it.
Ian
Click to expand...
Click to collapse
Hi, Ian,
Wow, what a great reply. I am so grateful for your inputs.
From the reviews, it seems that the app is always failing, and even when users uninstall/reinstall doesn't solve the problem. However, the previous version didn't have this problem. Which leaves me to believe is not the problem with IsolatedSetting. However, its definitely a good idea to check if the LastMessageID is null before using it.
Another speculation is that my new version uses a WCF service hosted on azure, while my previous version only used odata connection. I am guessing the WCF service on azure is not available to all carrier and devices. But the question is that they should see a different error instead of the reported one. And I was hoping to reproduce this problem so I can be confident that its fixed in my next update. Without being able to reproduce it, it makes everything just a little bit harder.
Another suggestion: you may simulate "no connectivity/very slow connection/Azure service not responding" issues by using "tethered" PC connection (if your handset connected to PC via USB cable, it uses your PC connection). Install traffic shaper (like NetLimiter) and try to play...
sunxin8086 said:
Are you from Boston area?
Click to expand...
Click to collapse
Yep.
Thanks, I will try to play with it. however, its desirable to let the app quit when there is no connection. But some users report they experience this error when they have perfect connection.
I can recreate it (the error) on a device it would seem consistently (tried about five times)
Uninstall it if already installed and reboot
reinstalling it (I'm using the Application Deployment tool for this)
reboot the device
Run it: First time I run it I get the error, second time (and subsequent) it's fine.
Note that before running it (and getting the error) I have checked I have internet (e.g. by loading a page in IE). This happens using sim card, wifi, or tethered connection (with wifi off) - tethered should be pretty reliable so can't see that being a connection drop.
This is on an LG panther pre-nodo developer device.
Hope that gives some clues.
All the best,
Ian
Hi, Ian,
Thanks for your update. Were you able to recreate it on a post-nodo device? unfortunately, I don't have a pre-nodo device at my hand.
I don't have a post-nodo device handy to test it on unfortunately. It seems to be happening only soon after startup (it's ok if I leave it a while) as though something on the phone isn't ready yet. Maybe it's not the same therefore as what your users are experiencing (as it's not 'always') but if you think it will help do a version of the xap which outputs the exception message in the message box (just for testing purposes) and I'll see what it says.
Hi, Ian,
Thanks. Last night, I made a new version that generates an email with exception info when initialization failed. Also checks the LastMessageID to see if its null. Let me know if this fixes the problem, and if not, send me the exceptions, please. Thanks for your help.
Hi,
The error report you generate is at the bottom of this message. As you can probably see (if I'm reading it correctly) the error (for my device at least) is not actually the loading of the categories - it seems to be the when you open the push channel as you have no try catch around that.
Note the interesting .net behaviour (if I'm reading your code correctly) that when you first check the error in LoadCompletedEventArgs 'e' of categories_LoadCompleted it is null, but when you subsequently check it - after the open push channel attempt - it contains the push channel exception. It must just retrieve the latest async open error (i.e. that of the push channel not opening).
I would suggest you wrap your push channel open code with a try catch that does the following:
catch (InvalidOperationException e)
{
HandleInvalidOperationException(e);
return;
}
catch (Exception e)
{
// if you're here it's most likely an error in your code rather than one with the push channel
}
This is the sort of things I check for and handle appropriately (if you find a way of checking a code or enum rather than a string match on the message text let me know):
private void HandleInvalidOperationException(InvalidOperationException e)
{
if (e.Message == "Channel not opened")
{
//This exception is raised when a notification channel has not been opened yet for raw notifications.
}
else if (e.Message == "Failed to open channel")
{
//This exception is raised when the notification channel failed to open. Try opening the notification channel again.
}
else if (e.Message == "Channel quota exceeded")
{
//This exception is raised when either trying to open more than one notification channel per application, or when trying to open more than 15 notification channels per device.
}
//InvalidOperationException(Notification server temporarily unavailable)
else if (e.Message == "Notification server temporarily unavailable")
{
//The Microsoft Push Notification Service is unavailable.
}
// unknown if you reach here
}
I also check if there is a channel uri after opening (there sometimes isn't) and if there isn't I set a timer to check it every second until 60 seconds have passed. If it reaches 60 and the uri updated event hasn't fired I assume that the device's power level is too low for a push channel at the moment (about 25% battery will do this on some devices).
It sounds like you could just continue past your current issue though -i.e. your problem may well be the Push call, not the load categories, so with the right try catch etc. (with a revised/recoded check on whether the categories have loaded) you could always continue into the app with a gentle warning that push might be down. Have a play with that second error check in the load categories completed event - you might instead want to have that second 'if' as an 'else if' so that it doesn't get confused by subsequent errors (i.e. other than the categories loading service call).
Hope that's helped.
Cheers,
Ian
Your error report:
Query URL: /JokeCategories?$filter=Hidden eq 0
Outer Exception Message:
Failed to open channel
Outer Exception StackTrace:
at Microsoft.Phone.Notification.SafeNativeMethods.ThrowExceptionFromHResult(Int32 hr, Exception defaultException, NotificationType type)
at Microsoft.Phone.Notification.HttpNotificationChannel.Open()
at FunnyJokes.MainPage.SubscribeToPush()
at FunnyJokes.MainPage.categories_LoadCompleted(Object sender, LoadCompletedEventArgs e)
at System.Data.Services.Client.DataServiceCollection`1.<>c__DisplayClassd.<>c__DisplayClassf.<BeginLoadAsyncOperation>b__b()
at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at System.Delegate.DynamicInvokeOne(Object[] args)
at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)
at System.Windows.Threading.Dispatcher.OnInvoke(Object context)
at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)
Hi, Ian,
I think that must be it. That totally explains why a small number of users would get this. However, where I am confused that categories_LoadCompleted is the handler for when categories load finishes, and takes LoadCompletedEventArgs, it should only be triggered in the above case. Why failing opening a channel also leads to this handler is puzzling me. Is it feature of .Net or a bug?
To be more specific, if open the channel failed, shouldn't the myPushChannel_ErrorOccurred method called instead of the categories_LoadCompleted? I am deeply confused now.
You just have to check for errors in two places (and you're currently only checking in one) - it would be nice if the error event handled everything but unfortunately it can't; e.g. take the 'InvalidOperationException ' case of no channels being left on the device (quota exceeded), if there's no channel ever created in the first place then there's nothing to assign the error event to anyway; hence why you need to check both on initialisation (with the try catch around the open - see above), and once you've set it going (with the error event).
In your error event you can check what the problem is using a nice enum:
switch (e.ErrorType)
{
case ChannelErrorType.ChannelOpenFailed:
break;
case ChannelErrorType.MessageBadContent:
break;
case ChannelErrorType.NotificationRateTooHigh:
break;
case ChannelErrorType.PayloadFormatError:
break;
case ChannelErrorType.PowerLevelChanged:
// 0 is normal, 1 is low, 2 is critical
if (e.ErrorAdditionalData == (int)ChannelPowerLevel.LowPowerLevel || e.ErrorAdditionalData == (int)ChannelPowerLevel.CriticalLowPowerLevel)
// note a value of 0 here is not an error
break;
}
Ian
Thanks Ian for the explanation. I got this part, however, what still puzzles me is why the InvalidOperationException got captured in the categories_LoadCompleted method. shouldn't this method only called from within the odata class? Is this a feature of .net or a bug??
I agree it doesn't seem to make sense You have no try catch, yet the exception is seemingly being bubbled up a level and then contained somehow within your categories_LoadCompleted method.
The reason is found by decompiling the DataServiceCollection class. Here's part of what happens when you call LoadAsync - notice that when an error occurs (i.e. the push channel exception) your completed event is actually being called a second time (as it is contained in the bolded try catch below), and this time it contains the new InvalidOperationException. Obviously you'll need to code around this behaviour. You'll probably be fine knowing that, but is there a way you can keep the code in the completed method just for completion of loading categories (and subscribe to push, load messages, etc. elsewhere)? It might be good to do that just to help avoid encountering the same confusing situation elsewhere.
Hope that helps!
Ian
Code:
private void BeginLoadAsyncOperation(Func<AsyncCallback, IAsyncResult> beginCall, Func<IAsyncResult, QueryOperationResponse> endCall)
{
this.asyncOperationInProgress = true;
try
{
beginCall.Invoke(delegate(IAsyncResult ar)
{
Deployment.get_Current().get_Dispatcher().BeginInvoke(delegate
{
try
{
QueryOperationResponse queryOperationResponse = endCall.Invoke(ar);
this.asyncOperationInProgress = false;
if (this.LoadCompleted != null)
{
this.LoadCompleted.Invoke(this, new LoadCompletedEventArgs(queryOperationResponse, null));
}
}
[B]catch (Exception error)
{
this.asyncOperationInProgress = false;
if (this.LoadCompleted != null)
{
this.LoadCompleted.Invoke(this, new LoadCompletedEventArgs(null, error));
}
}[/B]
}
);
}
);
}
catch (Exception)
{
this.asyncOperationInProgress = false;
throw;
}
}
You are the man. Yeah, I plan to keep the loadCompleted method clean, so I will try to catch the exception in the subscribeToPush method. Thank you so much for all your help. Couldn't do it without you.
Hi, Ian,
Hope you can see this. I pushed out an update with the error reporting for my app two days ago. The version was pushed before I realized the error has something to do with Push Channel failed to open. However, from the user report, I found another rather interesting and confusing error.
Query URL: /Messages?$filter=Hidden eq 0 and Version eq 1,5 and ID gt 0
Outer Exception Message:
An error occurred while processing this request.
Inner Exception Message:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code></code>
<message xml:lang="en-US">Syntax error at position 29.</message>
</error>
At first, its kinda shocking to me that why my Version was transformed to "1,5", instead of "1.5"(comma instead of period). After googling it, I found it has something to do with CultureInfo. Wow, I would never thought about this, if I don't get an error report. Supporting multi-region is a lot tougher than I thought.
You have to be careful anywhere you use dates, doubles, etc. as string.format (or most string methods) format them according to regional settings of the user - so unless you specify otherwise a user in Germany will see 1,5 whereas a UK user will see 1.5. This is a good thing usually as people get to see numbers and dates in the format they're used to.
You can get round it (when you need to have it a specific way e.g. for your query) using the InvariantCulture (which tells it to not use the current region's settings). E.g. for your versionid:
string.Format(CultureInfo.InvariantCulture.NumberFormat, "{0:0.0}", VersionID);
Will always (off the top of my head - make sure you test it) output using a decimal point rather than a comma.
A simpler way for you might be just to store the version ID as a string in the first place if that doesn't affect anything.
You can test all this in the emulator by e.g. changing the country to Germany and seeing if everything still works.

[Q] How to write an app

Ok its not note2 specific just that I have a note 2....
I need to create an app that can read a text, send a text, and read/write a file from an external usb stick, it sounds easy but.....
So I'm open to suggestions as to what IDE/toolchain I should be aiming at, I have wrote ''an app'' that does this, but its actually in picbasic and runs on a pic 18f2550 with a serial modem and internal flash
I want to do away with the pic/modem and just an android phone.
One other thing, the file on the usb stick, the usb stick isnt, its actually a controller for other hw devices, i just make the controller appear to usb as mass storage as that makes a simple text file an easy way for it to communicate, if its possible...I'd sooner make the controller appear as a serial coms device like the 9600 8n1 standard but I dont know if i could get away with that via OTG where as I know OTG can read write a text file..
I haven't started playing with it yet, but you might find Intellij Idea to be a tool you can learn to use.
For Open Source Projects it's free.
Grant Barker said:
I haven't started playing with it yet, but you might find Intellij Idea to be a tool you can learn to use.
For Open Source Projects it's free.
Click to expand...
Click to collapse
Thanks, I'm not too bothered what I write it in anything from C to zx81basic would do the job, its just getting it into a form the phone can execute
..
Just wondering if you tried using google for your question.
-----
I would love to help you, but help yourself first: ask a better question
http://www.catb.org/~esr/faqs/smart-questions.html
If I were you, I would check out Tasker on the play store. Theres a huge following with tons of available and customizeable profiles.
If you haven't heard of it, it's an extremely powerful app that allows you to write (or apply) various profiles to automate almost anything, whether youre a beginner or advanced user.
http://tasker.dinglisch.net
spycedtx said:
Just wondering if you tried using google for your question.
-----
I would love to help you, but help yourself first: ask a better question
http://www.catb.org/~esr/faqs/smart-questions.html
Click to expand...
Click to collapse
I half agree, but for a generic question like this, it's much more effective to ask in a community of mobile enthusiasts who might have a little more insight. Imo.
Sent from my SGH-T889 using Tapatalk 2
Thanks guys, I just had a look at app inventor and it made me want to cry...
I'm used to c/basic/asm (dare I say cobol, well i am 46....) so anything drag and drop I find infuriating/restrictive/non intuative, even tough there supposed to simple to use, I find them not...
you will no doubt be aware of such apps as prey, find my droid, wavesecure, they all can read an incoming text for a keyword and if present perform an action, thats similar to what i am trying to achive, well its part of it etc
easiest way to simplify this is imagine a lighthouse for boats, I need to be able to send a message to my phone at the top of a lighthouse, to turn the light on. I also need to be able to query the light status.
now doing this with a arduino/pic and a bag of relays was no biggy, what was the issue was the phone was connected via its connector running serial data at 9600 and modem AT protocols from the 1970's....
this all worked fine, 100% working, but the phones had the issue that after a random amount of days they would stop responding to commands, but would say 'ok' to every command given...
so replaced with a modem module and a seperate 2 line lcd, this worked fine, but put the cost up....
so decided that as old android phones with damaged screens are often very cheap, and most support OTG, the way is open to try doing this once again, using the phone to receive a text, reply to the text, and control the light by writing out a txt file to the ''usb mass storage stick'' thats simply light.txt and is a txt file containing the word 'on' 'off' or 'status'
The pic controller which is happy to pretend to be USB storage, and look for this file, and take the required action, if it sees 'on' or 'off' it simply toggles a pin to on or off, if its 'status' it sense the light, and creates a file of answer.txt with 'yes' or 'no' as content
the app can look for the answer.txt, and depending on it being 'yes' or 'no', send a replay text with 'ok' or 'bring a spare bulb'
of course I dont have a lighthouse, but you see what i'm trying to achive with an android phone over the old working but unreliable T68i (I have a few of them about a dozen left I think, all have same firmware bug)
Wow. I hope you're not making anything dangerous. SMS text `cancel'. SMS text `bang'.
Seriously though, I'm 44. So respect to any middle-aged dudes in the house. :good:
Grant Barker said:
Wow. I hope you're not making anything dangerous. SMS text `cancel'. SMS text `bang'.
Seriously though, I'm 44. So respect to any middle-aged dudes in the house. :good:
Click to expand...
Click to collapse
Lol no its a replacement for a circuit that of all things originally started with a motorola startac and a relay across button '5' to dial help
I dont want to be too open about the 'final design' as I want to present it to the forum as a working prototype that others can copy/use and dont want beating to the finish etc.
I've put many years of work into this on and off, even bought 20 2nd hand phones for the 'beta test' which then 'cancelled' due to the phones not being able to be left on 24/7 without locking up, and i killed a few making them 'battery free' and some more making a reboot circuit that just pulled power which they didnt like happening too often, so I abandoned it till now, I now think I'm onto a winner with the new 'design'

NFC IDs + Arduino

I have a project (NFC Vending machine) based on Arduino which calls a function called nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A)
Which returns a simple UID of the device that is tapped to the NFC antenna. This is used to identify the user, display their name and account balance, relay to coin acceptor and then saving the new balance back to an SD card.
This application works perfectly with my Nexus 4, a friend's stock Nexus 4, as well as any NFC Tag.
When I try using a new Galaxy S4 however, the application finds an ID from it, however it CHANGES every time it's scanned? Does anyone have any idea how to stop this from happening? I'm not opposed to writing an app if I can write an app that stops this from happening (some function in code that can set the UID to a static unchanging value, maybe using wifi mac address as a base)?
When I try scanning a co-worker's Droid DNA, NOTHING happens. NFC is on, beam seems to work, but nothing happens. I'm wondering if I install an app that reads/writes cards and tell it to perform an activity maybe that will 'wake up' the nfc chip making it active and forcing it to spit out an ID?
I have a feeling I'll have to use an "if id is not found, try ndef" and write an app that can send an ndef message that is the wifi mac address (so it'll be unique), though I haven't done much in the way of app development, though I'm very familiar with playing with all kinds of nooks and crannies in the filesystem to do fun things in android. I'm not opposed to learning, and have been trying, just not too familiar with java which certainly doesn't help... In any event, I'll be diving in and punishing myself with more hours of reading soon...
I realize this is a rather unique project and I may not find a resolution here but any ideas anyone can offer would be a big help. In the meantime I'll continue reading up on the various actions that are available to the programmer regarding nfc in the android sdk...
Thanks for any suggestions!
EDIT: I forgot to add, while I realize NDEF is an option (one that will require me learning a fair bit), it adds a great degree of difficulty in working with Arduino, which doesn't seem to have much in the way of libraries/code for handling NDEF, particularly peer-to-peer...

[Q] how hide apps in start menu of Windows 10 Mobile "or" add whitelist to Edge?

[Q] how hide apps in start menu of Windows 10 Mobile "or" add whitelist to Edge?
Hi,
is it possible to "hide" an app from the W10M start menu? And I don't refer to the home screen, I mean the full list of apps.
Or would there be a way to let the browser only work with a whitelist? .. No, Microsoft Family does not work properly on W10M.
Background - feel free to call me soft:
- Bought a Lumia 640 XL for my wife and a 2nd hand Lumia 535 for my daughter (to be her first smartphone, getting 9 end of the month) so that they could "share" the same experience, more or less.
- Played around with the "Microsoft Family" feature, and, to make it short, it doesn't work properly, not nearly close to what was expected or advertised. That might change ... in a few months. Maybe.
At least the URL filtering does not work "at all".
- So, in short, in order not to instantly fall back to pick an Android based device for my daughter (one beloved Razr i still in close range...), I was wondering if it was possible to "hide" one or the other thing from the start menu instead, the Edge browser in particular. Uninstallation I don't expect to be possible, probably being a deeper chunk of the OS, but only touching the start menu I concluded "should" be possible, one way or the other. At least I hope so.
Would I start to deal with the "full file system access" approach or rather try to dive into registry fiddling? Any help or maybe clear hint would be highly appreciated.
By now I did not find anything related to this. Neither here at xda or somewhere else. Probably no one considers doing something like that for his kids on Windows 10 Mobile ...
Who would want to hide a browser on a smartphone, anyway? .. yeah, I can't keep my kids "off" of the bad Internet, but I can at least keep an eye upon as long as possible.
Thanks in advance,
regards,...
bloodot
additional remark:
... after adding "a few" URLs to Microsoft's web interface for blocking URLs (via a web automation tool, yeah, I'm lazy...) it stopped working at 1003 regitered URLs. So, as long as they don't come up with something that works (whitlist... external service for checking URLs... whatever...) any help on this matter would be highly appreciated.
You want to keep her off the "web," correct?
Change your Mobile Data & Wifi DNS to 127.0.01
(You will need interop/FS access: )
Create a hosts file in C://Windows/system32/drivers/etc
Determine what sites you want to *allow* and find their IP. For example, if you want to whitelist Facebook, open cmd.exe from your PC and type:
Code:
ping facebook.com
You'll see:
Code:
C:\WINDOWS\system32>ping facebook.com
Pinging facebook.com [31.13.76.68] with 32 bytes of data:
Reply from 31.13.76.68: bytes=32 time=75ms TTL=82
Reply from 31.13.76.68: bytes=32 time=76ms TTL=82
Reply from 31.13.76.68: bytes=32 time=79ms TTL=82
Reply from 31.13.76.68: bytes=32 time=74ms TTL=82
Ping statistics for 31.13.76.68:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 74ms, Maximum = 79ms, Average = 76ms
C:\WINDOWS\system32>
So, you'd add:
Code:
31.13.76.68 facebook.com
31.13.76.68 www.facebook.com
to your phone's host file.
If you can create profiles on your router, you can also do the same (DNS to 127.0.01 for her phone's MAC address)
Doing this would make all of the web unresolvable, except facebook.com
To change the Wifi DNS:
Settings -> Network & Wireless -> Wi-fi -> Static IP -> fill your info
*If your router doesn't support static IP, you should check and see if your router supports profiles, and build one to target her phone mac address.* (If you don't target her mac address/other phone identifier and set your router to 127.0.01, all of the devices on your network will encounter blocked access to the web)
For Mobile Data:
I don't see an immediate switch for this (at least with my provider), it's routed through a network port on their servers. Unless something changes in future builds, it's probably best to just turn mobile data off and use the Wifi/hosts to keep control of what sites she can access.
Thank you very much!
Point is, I don't want to keep her off completely, and the major issue would be to keep control once she's "not" inside our home network but on cellular.
So I think I need to start investigating on my own whether I can manipulate the start menu or even the browser itself.
The local DNS lookup, which would only work on WiFi anyhow, would also result in me analyzing all communcation end points for "any" kind of
app I'd like her to use. Doable, but still the mobile part would be open. Beyond that I cannot block here "re-enabling" the cellular data connection,
the system isn't that strict in that matter. Would be nice, though, ...
@home I already use OpenDNS, probably should have mentioned that, so that's more or less under control.
Let's see if some other ideas or approached pop up from xda; I'm actually trying to get in direct contact with one of the Microsoft Family team
as, on a business level, we're currently working closely with some of the Microsoft 10 teams.
If they, if connected that is, tell me that they're aware of the bugs and that they're actually part of a road map, I'd be happy, too.
However, for the time being I expect I have to sort it on my own.
I'll give it a go with interop and see what I can find to deal with.
So, any other ideas?
Regards,..
bloodot
How about interopunlock and use your own hosts file?
How about App corner inside settings?
augustinionut said:
How about interopunlock and use your own hosts file?
How about App corner inside settings?
Click to expand...
Click to collapse
... the hostsfile will only work via WiFi, at least that's my current understanding as for cellular one cannot change the DNS settings, meaning, you can't make them point towards 127.0.0.1.
App Corner I already "played" around with - it has some other issues
- it's buggy, sometimes it doesn't even start.
- can be bypassed by just restarting the device
- everything "allowed" is available to public, more or less.
- the App Corner does not allow "games" to be made available ...
... hey, so what about the kids' corner?
- well, that doesn't allow the phone app... but still, that would also be a half-baked approach again.
I hope it were at least three different teams designing those packages, the kids' corner, the app corner and the family safety integration.
As a whole, NONE of them delivers what a parent needs when actually "permanently" giving a Windows based phone to one of his children.
bloodot said:
... the hostsfile will only work via WiFi, at least that's my current understanding as for cellular one cannot change the DNS settings, meaning, you can't make them point towards 127.0.0.1.
App Corner I already "played" around with - it has some other issues
- it's buggy, sometimes it doesn't even start.
- can be bypassed by just restarting the device
- everything "allowed" is available to public, more or less.
- the App Corner does not allow "games" to be made available ...
... hey, so what about the kids' corner?
- well, that doesn't allow the phone app... but still, that would also be a half-baked approach again.
I hope it were at least three different teams designing those packages, the kids' corner, the app corner and the family safety integration.
As a whole, NONE of them delivers what a parent needs when actually "permanently" giving a Windows based phone to one of his children.
Click to expand...
Click to collapse
PIN + kids corner. Can't bypass it.
-W_O_L_F- said:
PIN + kids corner. Can't bypass it.
Click to expand...
Click to collapse
... it's not my phone she should use. She should be able to use her own phone.
That includes calling her mum or me.
"Phone" is not an allowed app for the kids corner, it ain't listed when setting that up.
And even if it was, it would allow "anyone" who would steal that phone to directly use it's SIM card hazzle free.
And, as a minor annoyance, anything else that would be allowed via that mechanism.
It's just the current truth to deal with, W10M is not child-ready by any means.
If I want more control, I need to switch the phone.
Or start trusting a 9year-ish old girl to deal with the Internet without restrictions.
... so fiddled around with a few things, though interop is active according to the tool itself after sideloading it, wconnect won't work at all (crashes, no proper error given and before that IpOverUsbInstaller won't finish installation), so I can't get that key to get the SSH connection done and therefore I can't get full file access.
I think I'm done with this now. Selling the phone, using the Razr I instead, already have the proper system locking tools in place for that, bye bye Lumia 535. I would have loved to see my child deal with such an "easy" OS interface for getting used to smartphones, but I can't let her have access to the Internet while "not at home" without restrictions. No way.
... went so far and tried miradore to restrict the system via MDM. And guess what ... the f'n browser CANNOT be blocked via MDM. At least miradore has a free trial of 14 days. I was even willing to pay the damn 2$ per month for that service. *sigh* MAYBE it has a URL filter SOMEWHERE ...
... however, at least one can disallow the "usage" of the browser. MAYBE that works. Trying...
Yes. Works. JESUS ... what a mess. Let's see if I can get that done somewhere / somehow via MDM "without" another monthly fee ...
yeah, worked. Pitty though, they want "10$" minimum fee per month.
BUT: ... I stumbled over https://www.manageengine.com/mobile-device-management/
Free for up to 25 devices. Either cloud based (not supporting W10M for now) or Windows based installation (supporting W10M, more up2date...).
And it works. Thank you very much. Case closed.
Though I cannot restrict the URLs ... I can blog the Edge browser. And the Microsoft Store. Happy bunny.

Help getting started

Just got my Gemini - been looking forward to it as my last remaining Psion 5mx is dying (yes I've been using one all this time). BUT I've never used an Android device before (I have a Windows phone) and I'm having some problems. For example, how do I turn it OFF??? Fn Esc turns the SCREEN off, according to the Quick Start Guide, but shouldn't it be possible to turn the device off to save battery life? Or am I not supposed to do that? And how do I reach the equivalent of File Manager so I can see what files I've got on the machine and choose whether to use the internal memory or MicroSD card (once I get a MicroSD card for it, which will be soon)? And can anyone recommend a basic Android guide to help me get started? So far I've managed to: update the software; get the physical keyboard and the language used matching (but unfortunately it has arrived with a US keyboard); get my Gmail; get started with Word. The main things I want to use the Gemini for are (a) writing; (b) having my databases (e.g. of my books) from my old Psion. Assistance appreciated.
I've found ES File Explorer Pro to be excellent as not only will it deal with internal memory and the SD card but also my NAS and FTP needs. Only slight upset will be when you discover that the 'last modified' file attribute is not retained correctly by Android. As far as I am aware, only OnePlus and Google devices have so far fixed this long standing bug. Fortunately any photographs are sorted by apps that read the date from the EXIF data rather than the file attribute. As for turning off.... Press and hold the function key and ESC, after a second or so you will get option to power off or reboot.
Hope this helps.
Thank you! (But more questions)
Many thanks for this - I presume I get ES File Explorer Pro from the app store - when I work out how to get to that... (how DO I get to the store?)
Is the Gemini designed to be 'on' all the time like a phone, so it's useable quickly? (which was after all one of the advantages of the Psion). And if so, when is it sensible to switch it off? I do keep my 10-inch Toshiba Satellite click-mini on most of the time, but I tend to turn it off at night, for example.
And a totally different question: is it possible to set it so the keyboard doesn't 'buzz' with every key stroke?

Categories

Resources