Application Runs on emulator but not on Device..

Put your problem here if it does not fit any of the other categories.

Application Runs on emulator but not on Device..

Postby Ganeshkumar » Wed Jan 06, 2010 8:34 am

I am using API 4, this code works properly on emulator but doesnt work on device (HTC Hero). Can somebody help me plz??




package com.SampleProject2;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.text.Layout;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
import android.view.KeyEvent;
public class SampleProject2 extends Activity {
LinearLayout linearLayout;
Layout flowlayout;
EditText phoneNum;
Button callBtn;
TelephonyManager telephonyManager;


public static final String TABLE = "events";
// Columns public
static final String ISMINUM = "isminum";
public static final String TITLE = "title";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
linearLayout = new LinearLayout(this);
phoneNum = new EditText(this);
phoneNum.setHint("Number Here");
callBtn = new Button(this);
callBtn.setText("Call..");
phoneNum.setWidth(200);
linearLayout.addView(phoneNum);
linearLayout.addView(callBtn);
setContentView(linearLayout);
callBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MakeCall();
sendSMS (""+phoneNum.getText(),"Sample Message");
}
});
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_CALL) {
MakeCall();
}
return false;
}

public void MakeCall() {
phoneNum.setText("" + telephonyManager.getSubscriberId());


}

private void sendSMS( String phoneNumber, String message)
{
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";

PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
new Intent(SENT), 0);

PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(DELIVERED), 0);
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS sent",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(getBaseContext(), "Generic failure",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(getBaseContext(), "No service",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(getBaseContext(), "Null PDU",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(getBaseContext(), "Radio off",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(SENT));

registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS delivered",
Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(getBaseContext(), "SMS not delivered",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(DELIVERED));

try
{
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}
catch (Exception e)
{
System.out.println(""+e.getStackTrace());
}
}


}







Thank you in advance
Ganeshkumar
Once Poster
Once Poster
 
Posts: 1
Joined: Wed Jan 06, 2010 7:22 am
Location: Pune

Top

Postby jwei512 » Wed Jan 06, 2010 1:22 pm

Hm... I guess it sucks since you can't post the actual error itself...

Something I would try based off personal experience - I'd be careful with the telephonyManager

namely in this line

telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

What could be happening is that on the emulator, it returns the telephonyManager fine, but maybe once you test it on a real device it no longer gets returned and instead you get something like null in which case:

public void MakeCall() {
phoneNum.setText("" + telephonyManager.getSubscriberId());
}

This call would throw a null pointer exception.

Again, I'm just stabbing in the dark but maybe try doing a null check before making that call to ensure that there is no null pointer exception possible there
- jwei

http://thinkandroid.wordpress.com
Examples, Code, and Tutorials
jwei512
Senior Developer
Senior Developer
 
Posts: 135
Joined: Mon Jul 27, 2009 9:35 pm
Location: Palo Alto, CA

Top

Return to Other Coding-Problems

Who is online

Users browsing this forum: Exabot [Bot], Google [Bot] and 17 guests