How to call ATT service numbers (numbers ending with #) in the app - Android Software Development

Hi all,
I need a feature in my app to call AT&T and check the balance or minute usage. For example, to check how many minutes I have used, normally I should dial *MIN# (*646#) on my phone, and then I will get a text message.
I use the following simple way to make the phone call:
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:*646#"));
However in my app it seems the ending "#" is always ignored and the number my app dials is always *646, which goes nowhere.
Can anyone let me know how I can get to call the number with its ending character "#"?
Thanks,
Lik

Maybe try a backslash before the pound sign.
Code:
callIntent.setData(Uri.parse("tel:*646\#"));

I did try that but it didn't work.

What about the "*"? I'm guessing that Uri.parse() is trying to "parse" the string and that some character or another is being interpreted as a control character by the "parse" function.
Edit:
OK, I just did a search on URI encoding and found this:
http://www.tutorialspoint.com/html/html_url_encoding.htm
and according to this:
http://developer.android.com/reference/android/net/Uri.html
a "#" sign is interpreted as a fragment delimiter.
The first ref says to use "%23" to encode the # char so try this:
Code:
callIntent.setData(Uri.parse("tel:*646%23"));

That works. Thanks.

Related

What are the parameters in the callback to lineInitialize();

I'm using lineInitialize and lineopen to do things like query signal strength, but I was wondering what four of the parameters to the Callback are. I'm talking about the Callback made in LineInitialize.
The parameters I would like to get more info on are:
Msg, Param1, Param2, Param3
I believe Param2 is the Line Register Status, with values like LINEREGSTATUS_HOME but what are the others? The help on the function is extremely vague? Are the values device dependent? If so, does anyone know what the values are for the XDA/XDA2?
Ahh forget it...
The Param1, Param2, Param3 change depending on the MsgType, and the message type is defined in tapi.h

insert a variable into predifined string?

OK I've been looking for a while now. I'm trying to make a very simple app. what i want it to do is when i type a key word or phrase into a text box and hit the "GO" button i want the text that was typed to the text box to be inserted into a string which will be opened in the browser and search Google.
to clarify, basically taking the "Google Hacks" application for pc and writing it for android. i didn't think it was going to be that hard to do, but i cant find any examples of taking text from the text box and having it inserted in between the ""
-inurlhtm|html|php) intitle:"index of" +"last modified" +"parent directory" +description +size +(.mp3|.wma) ""
could anyone help me? i plan on later making it more like the pc app but right now just search for music, the apks and pics, etc...
may be
Intent intent = new Intent();
intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent);
search string can we get by TextView.getText().toString
thanks ill give it a try

Collada Loader

I would like to point out that the example at google code of a Collada Loader is misleading. (code.google.com/p/androidcolladaloader)
The way to handle data in the characters(char[] ch, int start, int length) callback funtion should be done in the endElement(String uri, String localName, String name) callback function. This is because data between XML tags can be splitted by the sax xml parser and then call the characters function multiple times. The solution to this I found at coderanch:
coderanch.com/t/432967/XML/Missing-characters-SAX-Parser
Where Ulf Dittmer suggests:
Yes. The one you have apparently assumes that all text data is returned in a single chunk (I can't tell for sure since you didn't post the full code of the method). You need to change it so that it still works if the text is returned in several chunks. One way to do that would be to append the text to a StringBuffer (which would be field in your handler class). Once the end element of whatever tag surrounds this text is reached, you can handle the text itself.
Click to expand...
Click to collapse
An example of working with a stringBuffer in the characters function is shown here:
onjava.com/pub/a/onjava/2002/06/26/xml.html?page=2
Note that the start and length argument given with the characters call back function are not there for nothing!

Trouble with database

Hello all! I'm somewhat new to Android development, I'm using eclipse to do all of my development. Right now I am working on an "away message text" application. I am having trouble with database query returning a string of the first index of data. Here is my code where i am trying to pull data from the database. This is being done inside my ReceiveText class, which extends BroadcastReceiver.
mDbHelper = new TextsDbAdapter(context);
mDbHelper.open();
getText = mDbHelper.fetchText(0);
message = getText.getString(getText.getColumnIndex(mDbHelper.KEY_BODY)).toString();
The error that I am getting is Cursor index out of bounds...any recommendations? Thanks!
you always start out of bounds.... you have to moveToFirst() first...
Thanks. Would I moveToFirst() before I fetchText()?
you're probably going to have to change how the fetchText method is implemented.
you'll probably want something like
Code:
public String fetchText(int id){
Cursor c = getContentResolver().query( uri,
new String[] { <name_of_text_column> } ,
"_id == " + id, null, null);
String text = null;
if( c != null ){
if( c.moveToFirst() ){
text = c.getString( c.getColumnIndex( <name_of_text_column> ) );
}
c.close();
}
return text;
}
Thanks. The method I have for fetchText returns a Cursor, however I made another method that returns a string, similar to what you recommended. For some reason, there is something wrong with the rowid sending in, I want to just get the first one, if I'm not mistaken, wouldn't it be 0? I have a seperate ReceiveText.java class, which extends Broadcast Receiver. The part where the messages are stored into the database is very similar to androids notepad demo. When a text is received, I want the ReceiveText class to query the database and just pull the first text that was actually stored into the database. I have 3 columns, KEY_ROWID, KEY_TITLE, and KEY_BODY. For some reason there is an issue when trying to query the database from the ReceiveText class. Any ideas that would make better sense or be easier to implement? Any help is much appreciated.
oh, right. I wasn't paying attention and for some reason I thought it was returning a string. I see now that it's obviously a cursor..
what you are doing sounds fine but you sure really look at the database on the phone/emulator.
open up adb and type
Code:
sqlite3 /data/data/<name_of_app>/databases/<name_of_db>
then you can do
Code:
select * from <name_of_table>
personally, I find it way easier to read if you change the mode with a ".mode line" command(the dot is important).
that should give you a good idea of why it is not working properly.
How do I open up the adb? I looked online, and it says i can run it through command line, or terminal since I use ubuntu, but I'm not sure exactly how to open it. Apologies for my noobness with android development i'm trying to learn!
if you're running it on a phone/tablet, you'll have to set up the adb drivers
but if you're just using the emulator, you're fine
Code:
cd /<path_to_sdk>/platform-tools/
./adb devices ##this should list the device. if not you have a problem.
./adb shell
and now you can execute commands on the device, like sqlite3
Awesome, I got that to work, and i can see the three "texts" that i've added to the database...looks like this...
1|Sleeping|Sleeping...text you when I wake up.
2|Driving|Driving right now...text you when I'm done.
3|Xbox|Playing xbox...text you later.
So this means that my database works. The numbers 1,2, and 3 are the KEY_ROWID, sleeping, driving, and xbox are the KEY_TITLE, and the third part is the KEY_BODY.
For some reason the ReceiveText class is having trouble pulling this information from the database, I really think it has something to do with when i Query the database, it asks for a columnindex, and i am putting a 0 as the parameter. Any ideas? Thanks again for all your help. It's a great learning process.
yeah, there doesn't seem to be a column with _id == 0
that is strange. when you defined it did you use "integer primary key autoincrement"? This should start at 0, I believe.. maybe you deleted your first entry at some point?
try it with 1 and see if that works.
Man, thanks so much for your help...it works! Here is how I did it from the ReceiveText class.
mDbHelper = new TextsDbAdapter(context);
mDbHelper.open();
getText = mDbHelper.fetchText(1);
message = getText.getString(2).toString();
getText is a Cursor type, and message is a String type.
I really appreciate the help, I understand a lot more now. My next step is to set the text to use without having to specify from the ReceiveText class...any suggestions? I was thinking adding another column in the database that would hold either a 1 or 0, and if it is selected, it updates the database and changes that field to a 1, then the ReceiveText class will query the database to return the field that has the 1...make sense? lol
Just to clear this up a bit for those still a little fuzzy:
Code:
Cursor c = db.query(TABLE_NAME3, new String[] {NAMESHORT, LAPTIME, LAPNUMBER}, null ,null, null, null, orderBy);
The column indexes are what you have in the "new String[]" area whether you have 1 or 50 items. So, NAMESHORT is index 0, LAPTIME is index 1 and LAPNUMPER is index 2. It's NOT the column number of where it is in the table
Just a personal preference of mine, but I code all this in the database methods and return what I need from there. Seeing hard-coded numbers in a program always bothers me. Instead of returning cursors I'll return a StringBuilder or ArrayList or whatever. Just sayn'

Quick variable type question.

I have an EditText object (et_travel) on my screen that's asking for miles traveled. I grab that data like this:
Code:
float travel = Float.parseFloat(et_travel.getText().toString());
if(travel > 40000){
I just discover that if someone puts 40000 in the EditText, everything works fine, but if they put 40,000 (adding a comma to the number), I force close on the float travel = ...statement.
How can I evaluate the number without having a problem from the user adding a comma?
you should parse the string before you run it through Float.parseFloat() so that there are no bad characters in the string. use some of the String methods to find and remove bad characters.
Also that parsefloat method probably throws some sort of exception. You could catch it and let your user know that there value is invalid and to try again
Sent from my Desire HD using XDA App
Set the properties on the edittext so it accepts numbers only.
android:inputtype="numberDecimal|numberSigned"
________________________________
http://ron-droid.blogspot.com

Categories

Resources