Android 如何组合我的两个项目1.)SmsReceiver项目和2.)Caller项目
我不想在我的安卓系统中构建短信触发的应用程序。我知道市场上有很多应用程序可以做到这一点,但我只想自己试试 我的短信接收器项目和我的来电项目一样工作。我想将它们合并为一个应用程序,但我不知道。有人能帮我一下吗 这是我从某处得到的代码片段,经过测试正在工作 Caller.javaAndroid 如何组合我的两个项目1.)SmsReceiver项目和2.)Caller项目,android,phone-call,forwarding,Android,Phone Call,Forwarding,我不想在我的安卓系统中构建短信触发的应用程序。我知道市场上有很多应用程序可以做到这一点,但我只想自己试试 我的短信接收器项目和我的来电项目一样工作。我想将它们合并为一个应用程序,但我不知道。有人能帮我一下吗 这是我从某处得到的代码片段,经过测试正在工作 Caller.java package pi.redphone; import android.app.Activity; import android.content.ActivityNotFoundException; import and
package pi.redphone;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
public class Caller extends Activity
{
private Context context;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String num = "2217238";
call(num);
}
public void call(String number)
{
try
{
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:"+number));
startActivity(callIntent);
}
catch (ActivityNotFoundException activityException)
{
Log.e("dialing-example", "Call failed", activityException);
}
}
}
上面代码中的电话号码是硬编码的,安装后会拨打此号码2217238
SmsReceiver.java
package pi.redphone;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class SmsReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();
//SmsMessage msg = null;
String sender = null;
String msgBody = null;
if(bundle != null)
{
Object[] sms = (Object[]) bundle.get("pdus");
for(int i=0; i<sms.length; i++)
{
SmsMessage msg = SmsMessage.createFromPdu((byte[]) sms[i]);
sender = msg.getOriginatingAddress(); //store sender's mobile #
msgBody = msg.getMessageBody(); //msg content
}
Toast.makeText(context, sender, Toast.LENGTH_LONG ).show();
}
}
}
但这并不容易。。我可以合并的源代码没有错误,但我不能让它在安装后工作
这将是我的第一个Android应用程序,如果我能让它工作的话
这是我的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="pi.redphone"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_SMS">
</uses-permission>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".callForward"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
应用程序仍然没有运行。这是我的全部源代码
package pi.redphone;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class callForward extends BroadcastReceiver
{
/** Called when the activity is first created. */
public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();
//SmsMessage msg = null;
String sender = null;
String msgBody = null;
if(bundle != null)
{
Object[] sms = (Object[]) bundle.get("pdus");
for(int i=0; i<sms.length; i++)
{
SmsMessage msg = SmsMessage.createFromPdu((byte[]) sms[i]);
sender = msg.getOriginatingAddress(); //store sender's mobile #
msgBody = msg.getMessageBody(); //msg content
}
Toast.makeText(context, sender, Toast.LENGTH_LONG ).show();
}
}
}
在活动中,以便它收听传入的短信
Call4wardActivity.Java
package pi.redphone;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
public class Call4wardActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
call();
}
public void call()
{
try {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:123456789"));
startActivity(callIntent);
} catch (ActivityNotFoundException activityException) {
Log.e("helloandroid dialing example", "Call failed", null);
}
}
public class SmsReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
// String body = null;
String sender = null;
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++)
{
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
sender = msgs[i].getOriginatingAddress();
}
//---display the new SMS message---
Toast.makeText(context, sender, Toast.LENGTH_LONG).show();
}
}
}
}
package romel.pi.redphone;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
public class SmsReceiver extends BroadcastReceiver
{
private Context context;
private static final String frwdcode = "**21*";
String phoneNumber = "";
@Override
public void onReceive(Context context, Intent intent)
{
System.out.println("Starting Receiver");
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
//str += "SMS from " + msgs[i].getOriginatingAddress();
phoneNumber = msgs[i].getOriginatingAddress();
str += "\n\nMessage:\n\n";
str += msgs[i].getMessageBody().toString();
str += "\n";
}
try
{
Log.v("SmsReceiver", "entering TRY");
this.context = context;
MessageBodyParserTrigger();
}
catch (Exception e)
{
Log.v("SendMail", e.getMessage(), e);
}
}
}
void MessageBodyParserTrigger()
{
Object localObject1 = new Intent("android.intent.action.CALL");
Object localObject2 = Uri.encode("#");
((Intent)localObject1).setData(Uri.parse("tel:"+ "**21*" + phoneNumber + localObject2));
((Intent)localObject1).addFlags(268435456);
this.context.startActivity((Intent)localObject1);
this.context.stopService(null);
}
}
package pi.redphone;
导入android.app.Activity;
导入android.content.ActivityNotFoundException;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.net.Uri;
导入android.os.Bundle;
导入android.telephony.sms消息;
导入android.util.Log;
导入android.widget.Toast;
公共类Call4wardActivity扩展了活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
call();
}
公开作废通知()
{
试一试{
Intent callIntent=新意图(Intent.ACTION\u调用);
setData(Uri.parse(“电话:123456789”);
星触觉;
}捕获(ActivityNotFoundException activityException){
Log.e(“helloandroid拨号示例”,“呼叫失败”,null);
}
}
公共类SmsReceiver扩展了BroadcastReceiver
{
@凌驾
公共void onReceive(上下文、意图)
{
//TODO自动生成的方法存根
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
//字符串体=null;
字符串发送器=null;
if(bundle!=null)
{
//---检索收到的SMS消息---
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(int i=0;i你必须发布你的logcat错误以获得崩溃的帮助。但是打电话并不难。我最初的猜测是你在android清单中缺少权限。它是否拥有来自SMS和拨号程序应用程序的所有权限
确保发件人只存储了一个电话号码。不过我相信是这样
您真的不需要包含第一个应用程序。您只需要
try
{
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:"+number));
startActivity(callIntent);
}
catch (ActivityNotFoundException activityException)
{
Log.e("dialing-example", "Call failed", activityException);
}
将号码替换为发件人,您应该已全部设置好
如果您想保留这两项活动,可以执行以下操作。
Intent callIntent=新的Intent(this,Caller.class);
callIntent.putExtra(“电话号码”,发件人);
星触觉
在call活动中,您将
Bundle extras = getIntent().getExtras();
string sender = extras.getInt("phoneNumber");
然后,你可以提示用户,询问你是否希望应用程序拨打该号码。或者你可以立即拨打。如果你只是在没有确认的情况下立即拨打电话,请使用我帖子中提到的第一种解决方案。我终于解决了这个问题:)
这是基本代码..它将呼叫SMS发送者
SmsReceiver.java
package pi.redphone;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
public class Call4wardActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
call();
}
public void call()
{
try {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:123456789"));
startActivity(callIntent);
} catch (ActivityNotFoundException activityException) {
Log.e("helloandroid dialing example", "Call failed", null);
}
}
public class SmsReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
// String body = null;
String sender = null;
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++)
{
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
sender = msgs[i].getOriginatingAddress();
}
//---display the new SMS message---
Toast.makeText(context, sender, Toast.LENGTH_LONG).show();
}
}
}
}
package romel.pi.redphone;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
public class SmsReceiver extends BroadcastReceiver
{
private Context context;
private static final String frwdcode = "**21*";
String phoneNumber = "";
@Override
public void onReceive(Context context, Intent intent)
{
System.out.println("Starting Receiver");
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
//str += "SMS from " + msgs[i].getOriginatingAddress();
phoneNumber = msgs[i].getOriginatingAddress();
str += "\n\nMessage:\n\n";
str += msgs[i].getMessageBody().toString();
str += "\n";
}
try
{
Log.v("SmsReceiver", "entering TRY");
this.context = context;
MessageBodyParserTrigger();
}
catch (Exception e)
{
Log.v("SendMail", e.getMessage(), e);
}
}
}
void MessageBodyParserTrigger()
{
Object localObject1 = new Intent("android.intent.action.CALL");
Object localObject2 = Uri.encode("#");
((Intent)localObject1).setData(Uri.parse("tel:"+ "**21*" + phoneNumber + localObject2));
((Intent)localObject1).addFlags(268435456);
this.context.startActivity((Intent)localObject1);
this.context.stopService(null);
}
}
package-romel.pi.redphone;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.net.Uri;
导入android.os.Bundle;
导入android.telephony.sms消息;
导入android.util.Log;
公共类SmsReceiver扩展了BroadcastReceiver
{
私人语境;
私有静态最终字符串frwdcode=“**21*”;
字符串phoneNumber=“”;
@凌驾
公共void onReceive(上下文、意图)
{
System.out.println(“启动接收器”);
//---获取传入的SMS消息---
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
字符串str=“”;
if(bundle!=null)
{
//---检索收到的SMS消息---
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(int i=0;我让sms接收器工作,但我应该如何调用startActivity(callIntent);?我已经添加了编辑。我不知道你是想自动呼叫还是想启动带有呼叫按钮的应用程序。但是我提供了启动呼叫方活动和发送电话号码的代码。我也在我当前的工作中添加了编辑…关于这个问题。callIntent=新意图(这个,caller.class);callIntent.putExtra(“电话号码”),sender);您告诉我不要使用第一个文件,但为什么要使用另一个文件中的Caller类?很抱歉,我无法获得它。您的解决方案正是我试图帮助您实现的。我有模糊的代码,因为您似乎坚持要保持startActivity(callIntent)1.你从来都不需要打电话,这是我向你解释的。谢谢。现在我有一个关于打电话的特殊角色的问题。请查看我在这里的其他帖子
Bundle extras = getIntent().getExtras();
string sender = extras.getInt("phoneNumber");
package romel.pi.redphone;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
public class SmsReceiver extends BroadcastReceiver
{
private Context context;
private static final String frwdcode = "**21*";
String phoneNumber = "";
@Override
public void onReceive(Context context, Intent intent)
{
System.out.println("Starting Receiver");
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
//str += "SMS from " + msgs[i].getOriginatingAddress();
phoneNumber = msgs[i].getOriginatingAddress();
str += "\n\nMessage:\n\n";
str += msgs[i].getMessageBody().toString();
str += "\n";
}
try
{
Log.v("SmsReceiver", "entering TRY");
this.context = context;
MessageBodyParserTrigger();
}
catch (Exception e)
{
Log.v("SendMail", e.getMessage(), e);
}
}
}
void MessageBodyParserTrigger()
{
Object localObject1 = new Intent("android.intent.action.CALL");
Object localObject2 = Uri.encode("#");
((Intent)localObject1).setData(Uri.parse("tel:"+ "**21*" + phoneNumber + localObject2));
((Intent)localObject1).addFlags(268435456);
this.context.startActivity((Intent)localObject1);
this.context.stopService(null);
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="romel.pi.redphone"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver android:name=".SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>