gpt4 book ai didi

java - Android 自动文本回复使用广播接收器发送多个文本。

转载 作者:行者123 更新时间:2023-11-30 01:23:07 26 4
gpt4 key购买 nike

以下代码向来电号码发送文本,但每次发送的文本数量不同。有时它只发送一个,但最多可达 6 个。在运行时监视我的代码时,我也会收到不同数量的广播。我做错了什么?

接收者:

package com.biapps.makin_biscuits;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.PhoneStateListener;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

/**
* Created by Jake on 3/21/2016.
*/

public class IncomingCallReceiver extends BroadcastReceiver {

private static final String TAG = "MyListener";
private Context mContext;
private Intent mIntent;

@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
mIntent = intent;
TelephonyManager tm = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
int events = PhoneStateListener.LISTEN_CALL_STATE;

tm.listen(phoneStateListener, events);
}

private final PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override

public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);

Log.i(TAG, "number: " + incomingNumber + "");
Toast.makeText(mContext,"Incoming Call: " + incomingNumber + "",Toast.LENGTH_LONG).show();
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(incomingNumber, null, "I'm busy bruh", null, null);
TelephonyManager tm = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);

}

}
};
}

list :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.biapps.makin_biscuits">
<uses-sdk android:minSdkVersion="4" />

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SEND_SMS"/>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name=".ContactsList">
<intent-filter>
<category android:name="android.intent.category.ALTERNATIVE" />
</intent-filter>
</activity>

<receiver
android:name=".IncomingCallReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.Trigger" />

</intent-filter>
</receiver>
</application>

</manifest>

主要 Activity :

package com.biapps.makin_biscuits;

import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
//set object labels and states here
private ImageButton icon;
private AudioManager am;
private ImageButton people;
private ImageButton ring;

@Override

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

icon = (ImageButton) findViewById(R.id.icon);
icon.setOnClickListener(imgButtonHandler);
people = (ImageButton) findViewById(R.id.people);
//people.setOnClickListener(peopleButtonHandler);
ring = (ImageButton) findViewById(R.id.ring);

}

int buttonstate = 0;
public View.OnClickListener imgButtonHandler = new View.OnClickListener() {

public void onClick(View v) {
if (buttonstate == 0) {

icon.setImageResource(R.drawable.buttonup);
buttonstate = 1;
am.setRingerMode(0);
Toast.makeText(getApplicationContext(), "Go!!",
Toast.LENGTH_SHORT).show();

Intent intent = new Intent();
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
intent.setAction("android.intent.action.Trigger");
sendBroadcast(intent);
} else {

icon.setImageResource(R.drawable.button);
buttonstate = 0;
am.setRingerMode(2);
Toast.makeText(getApplicationContext(), "Come back!!",
Toast.LENGTH_SHORT).show();
}
}
};
}

最佳答案

我添加了一些代码来识别之前的状态并确定是否执行这些操作。这解决了问题。

package com.biapps.makin_biscuits;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.PhoneStateListener;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

/**
* Created by Jake on 3/21/2016.
*/

public class IncomingCallReceiver extends BroadcastReceiver {

private static final String TAG = "MyListener";
private Context mContext;
private Intent mIntent;

@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
mIntent = intent;
TelephonyManager tm = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
int events = PhoneStateListener.LISTEN_CALL_STATE;

tm.listen(phoneStateListener, events);
}

int previousState=TelephonyManager.CALL_STATE_OFFHOOK;
private final PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override

public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);

int Call_State_Ringing = TelephonyManager.CALL_STATE_RINGING;
int Call_State_OffHook = TelephonyManager.CALL_STATE_OFFHOOK;
if (Call_State_Ringing == state && Call_State_OffHook == previousState){
Log.i(TAG, "number: " + incomingNumber + "");
Toast.makeText(mContext,"Incoming Call: " + incomingNumber + "",Toast.LENGTH_LONG).show();
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(incomingNumber, null, "I'm busy bruh", null, null);
TelephonyManager tm = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);

}

}
previousState = state;
}
};}

关于java - Android 自动文本回复使用广播接收器发送多个文本。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36804489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com