新增转发到Server酱·Turbo版
This commit is contained in:
parent
0f21c1131f
commit
6e9a36ba3a
Binary file not shown.
|
@ -10,9 +10,9 @@
|
|||
{
|
||||
"type": "SINGLE",
|
||||
"filters": [],
|
||||
"versionCode": 16,
|
||||
"versionName": "1.6.0",
|
||||
"outputFile": "SmsForwarder_release_20210312_1.6.0.apk"
|
||||
"versionCode": 17,
|
||||
"versionName": "1.6.1",
|
||||
"outputFile": "SmsForwarder_release_20210312_1.6.1.apk"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -30,7 +30,7 @@ public class FrontService extends Service {
|
|||
if (romType == OSUtils.ROM_TYPE.MIUI_ROM) {
|
||||
builder.setContentTitle("短信转发器");
|
||||
}
|
||||
builder.setContentText("根据规则转发到钉钉/微信/邮箱/bark/webhook等");
|
||||
builder.setContentText("根据规则转发到钉钉/微信/邮箱/bark/Server酱/webhook等");
|
||||
Intent intent = new Intent(this, MainActivity.class);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity
|
||||
(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
|
|
@ -27,12 +27,14 @@ import com.idormy.sms.forwarder.model.vo.DingDingSettingVo;
|
|||
import com.idormy.sms.forwarder.model.vo.EmailSettingVo;
|
||||
import com.idormy.sms.forwarder.model.vo.QYWXAppSettingVo;
|
||||
import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo;
|
||||
import com.idormy.sms.forwarder.model.vo.ServerChanSettingVo;
|
||||
import com.idormy.sms.forwarder.model.vo.WebNotifySettingVo;
|
||||
import com.idormy.sms.forwarder.sender.SenderBarkMsg;
|
||||
import com.idormy.sms.forwarder.sender.SenderDingdingMsg;
|
||||
import com.idormy.sms.forwarder.sender.SenderMailMsg;
|
||||
import com.idormy.sms.forwarder.sender.SenderQyWxAppMsg;
|
||||
import com.idormy.sms.forwarder.sender.SenderQyWxGroupRobotMsg;
|
||||
import com.idormy.sms.forwarder.sender.SenderServerChanMsg;
|
||||
import com.idormy.sms.forwarder.sender.SenderUtil;
|
||||
import com.idormy.sms.forwarder.sender.SenderWebNotifyMsg;
|
||||
import com.umeng.analytics.MobclickAgent;
|
||||
|
@ -48,6 +50,7 @@ import static com.idormy.sms.forwarder.model.SenderModel.TYPE_DINGDING;
|
|||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_EMAIL;
|
||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_APP;
|
||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_GROUP_ROBOT;
|
||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SERVER_CHAN;
|
||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_WEB_NOTIFY;
|
||||
|
||||
public class SenderActivity extends AppCompatActivity {
|
||||
|
@ -121,6 +124,9 @@ public class SenderActivity extends AppCompatActivity {
|
|||
case TYPE_QYWX_APP:
|
||||
setQYWXApp(senderModel);
|
||||
break;
|
||||
case TYPE_SERVER_CHAN:
|
||||
setServerChan(senderModel);
|
||||
break;
|
||||
default:
|
||||
Toast.makeText(SenderActivity.this, "异常的发送方类型,自动删除!", Toast.LENGTH_LONG).show();
|
||||
if (senderModel != null) {
|
||||
|
@ -199,6 +205,9 @@ public class SenderActivity extends AppCompatActivity {
|
|||
case TYPE_QYWX_APP:
|
||||
setQYWXApp(null);
|
||||
break;
|
||||
case TYPE_SERVER_CHAN:
|
||||
setServerChan(null);
|
||||
break;
|
||||
default:
|
||||
Toast.makeText(SenderActivity.this, "暂不支持这种转发!", Toast.LENGTH_LONG).show();
|
||||
break;
|
||||
|
@ -528,6 +537,97 @@ public class SenderActivity extends AppCompatActivity {
|
|||
});
|
||||
}
|
||||
|
||||
private void setServerChan(final SenderModel senderModel) {
|
||||
ServerChanSettingVo serverchanSettingVo = null;
|
||||
//try phrase json setting
|
||||
if (senderModel != null) {
|
||||
String jsonSettingStr = senderModel.getJsonSetting();
|
||||
if (jsonSettingStr != null) {
|
||||
serverchanSettingVo = JSON.parseObject(jsonSettingStr, ServerChanSettingVo.class);
|
||||
}
|
||||
}
|
||||
|
||||
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
|
||||
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_serverchan, null);
|
||||
|
||||
final EditText editTextServerChanName = view1.findViewById(R.id.editTextServerChanName);
|
||||
if (senderModel != null) editTextServerChanName.setText(senderModel.getName());
|
||||
final EditText editTextServerChanSendKey = view1.findViewById(R.id.editTextServerChanSendKey);
|
||||
if (serverchanSettingVo != null)
|
||||
editTextServerChanSendKey.setText(serverchanSettingVo.getSendKey());
|
||||
|
||||
Button buttonServerChanOk = view1.findViewById(R.id.buttonServerChanOk);
|
||||
Button buttonServerChanDel = view1.findViewById(R.id.buttonServerChanDel);
|
||||
Button buttonServerChanTest = view1.findViewById(R.id.buttonServerChanTest);
|
||||
alertDialog71
|
||||
.setTitle(R.string.setserverchantitle)
|
||||
.setIcon(R.mipmap.serverchan)
|
||||
.setView(view1)
|
||||
.create();
|
||||
final AlertDialog show = alertDialog71.show();
|
||||
|
||||
buttonServerChanOk.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
|
||||
if (senderModel == null) {
|
||||
SenderModel newSenderModel = new SenderModel();
|
||||
newSenderModel.setName(editTextServerChanName.getText().toString());
|
||||
newSenderModel.setType(TYPE_SERVER_CHAN);
|
||||
newSenderModel.setStatus(STATUS_ON);
|
||||
ServerChanSettingVo serverchanSettingVoNew = new ServerChanSettingVo(
|
||||
editTextServerChanSendKey.getText().toString()
|
||||
);
|
||||
newSenderModel.setJsonSetting(JSON.toJSONString(serverchanSettingVoNew));
|
||||
SenderUtil.addSender(newSenderModel);
|
||||
initSenders();
|
||||
adapter.add(senderModels);
|
||||
} else {
|
||||
senderModel.setName(editTextServerChanName.getText().toString());
|
||||
senderModel.setType(TYPE_SERVER_CHAN);
|
||||
senderModel.setStatus(STATUS_ON);
|
||||
ServerChanSettingVo serverchanSettingVoNew = new ServerChanSettingVo(
|
||||
editTextServerChanSendKey.getText().toString()
|
||||
);
|
||||
senderModel.setJsonSetting(JSON.toJSONString(serverchanSettingVoNew));
|
||||
SenderUtil.updateSender(senderModel);
|
||||
initSenders();
|
||||
adapter.update(senderModels);
|
||||
}
|
||||
|
||||
show.dismiss();
|
||||
|
||||
}
|
||||
});
|
||||
buttonServerChanDel.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (senderModel != null) {
|
||||
SenderUtil.delSender(senderModel.getId());
|
||||
initSenders();
|
||||
adapter.del(senderModels);
|
||||
}
|
||||
show.dismiss();
|
||||
}
|
||||
});
|
||||
buttonServerChanTest.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
String serverchanServer = editTextServerChanSendKey.getText().toString();
|
||||
if (!serverchanServer.isEmpty()) {
|
||||
try {
|
||||
SenderServerChanMsg.sendMsg(handler, serverchanServer, "19999999999", "【京东】验证码为387481(切勿将验证码告知他人),请在页面中输入完成验证,如有问题请点击 ihelp.jd.com 联系京东客服");
|
||||
} catch (Exception e) {
|
||||
Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show();
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(SenderActivity.this, "Server酱·Turbo版的 SendKey 不能为空", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setWebNotify(final SenderModel senderModel) {
|
||||
WebNotifySettingVo webNotifySettingVo = null;
|
||||
//try phrase json setting
|
||||
|
@ -853,7 +953,6 @@ public class SenderActivity extends AppCompatActivity {
|
|||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
|
|
@ -12,7 +12,7 @@ public class SenderModel {
|
|||
public static final int TYPE_WEB_NOTIFY = 3;
|
||||
public static final int TYPE_QYWX_GROUP_ROBOT = 4;
|
||||
public static final int TYPE_QYWX_APP = 5;
|
||||
public static final int TYPE_MESSAGE = 6;
|
||||
public static final int TYPE_SERVER_CHAN = 6;
|
||||
private Long id;
|
||||
private String name;
|
||||
private int status;
|
||||
|
@ -46,10 +46,10 @@ public class SenderModel {
|
|||
return R.mipmap.qywx;
|
||||
case (TYPE_QYWX_APP):
|
||||
return R.mipmap.qywxapp;
|
||||
case (TYPE_MESSAGE):
|
||||
return R.mipmap.sms;
|
||||
case (TYPE_SERVER_CHAN):
|
||||
return R.mipmap.serverchan;
|
||||
default:
|
||||
return R.mipmap.ic_launcher;
|
||||
return R.mipmap.sms;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -107,10 +107,10 @@ public class SenderModel {
|
|||
return R.mipmap.qywx;
|
||||
case (TYPE_QYWX_APP):
|
||||
return R.mipmap.qywxapp;
|
||||
case (TYPE_MESSAGE):
|
||||
return R.mipmap.sms;
|
||||
case (TYPE_SERVER_CHAN):
|
||||
return R.mipmap.serverchan;
|
||||
default:
|
||||
return R.mipmap.ic_launcher;
|
||||
return R.mipmap.sms;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
package com.idormy.sms.forwarder.model.vo;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class ServerChanSettingVo implements Serializable {
|
||||
private String send_key;
|
||||
|
||||
public ServerChanSettingVo() {
|
||||
}
|
||||
|
||||
public ServerChanSettingVo(String send_key) {
|
||||
this.send_key = send_key;
|
||||
}
|
||||
|
||||
public String getSendKey() {
|
||||
return send_key;
|
||||
}
|
||||
|
||||
public void setSendKey(String send_key) {
|
||||
this.send_key = send_key;
|
||||
}
|
||||
}
|
|
@ -13,6 +13,7 @@ import com.idormy.sms.forwarder.model.vo.DingDingSettingVo;
|
|||
import com.idormy.sms.forwarder.model.vo.EmailSettingVo;
|
||||
import com.idormy.sms.forwarder.model.vo.QYWXAppSettingVo;
|
||||
import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo;
|
||||
import com.idormy.sms.forwarder.model.vo.ServerChanSettingVo;
|
||||
import com.idormy.sms.forwarder.model.vo.SmsVo;
|
||||
import com.idormy.sms.forwarder.model.vo.WebNotifySettingVo;
|
||||
import com.idormy.sms.forwarder.utils.LogUtil;
|
||||
|
@ -25,6 +26,7 @@ import static com.idormy.sms.forwarder.model.SenderModel.TYPE_DINGDING;
|
|||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_EMAIL;
|
||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_APP;
|
||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_GROUP_ROBOT;
|
||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SERVER_CHAN;
|
||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_WEB_NOTIFY;
|
||||
|
||||
public class SendUtil {
|
||||
|
@ -184,6 +186,20 @@ public class SendUtil {
|
|||
}
|
||||
break;
|
||||
|
||||
case TYPE_SERVER_CHAN:
|
||||
//try phrase json setting
|
||||
if (senderModel.getJsonSetting() != null) {
|
||||
ServerChanSettingVo serverChanSettingVo = JSON.parseObject(senderModel.getJsonSetting(), ServerChanSettingVo.class);
|
||||
if (serverChanSettingVo != null) {
|
||||
try {
|
||||
SenderServerChanMsg.sendMsg(handError, serverChanSettingVo.getSendKey(), smsVo.getMobile(), smsVo.getSmsVoForSend());
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "senderSendMsg: SenderServerChanMsg error " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
package com.idormy.sms.forwarder.sender;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import okhttp3.Call;
|
||||
import okhttp3.Callback;
|
||||
import okhttp3.MultipartBody;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.RequestBody;
|
||||
import okhttp3.Response;
|
||||
|
||||
import static com.idormy.sms.forwarder.SenderActivity.NOTIFY;
|
||||
|
||||
public class SenderServerChanMsg {
|
||||
|
||||
static String TAG = "SenderServerChanMsg";
|
||||
|
||||
public static void sendMsg(final Handler handError, String sendKey, String title, String desp) throws Exception {
|
||||
Log.i(TAG, "sendMsg sendKey:" + sendKey + " title:" + title + " desp:" + desp);
|
||||
|
||||
if (sendKey == null || sendKey.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
//特殊处理避免标题重复
|
||||
desp = desp.replaceFirst("^" + title + "(.*)", "").trim();
|
||||
|
||||
String sendUrl = "https://sctapi.ftqq.com/" + sendKey + ".send";
|
||||
|
||||
OkHttpClient client = new OkHttpClient().newBuilder().build();
|
||||
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM)
|
||||
.addFormDataPart("title", title)
|
||||
.addFormDataPart("desp", desp);
|
||||
|
||||
RequestBody body = builder.build();
|
||||
Request request = new Request.Builder().url(sendUrl).method("POST", body).build();
|
||||
Call call = client.newCall(request);
|
||||
call.enqueue(new Callback() {
|
||||
@Override
|
||||
public void onFailure(Call call, final IOException e) {
|
||||
Log.d(TAG, "onFailure:" + e.getMessage());
|
||||
|
||||
if (handError != null) {
|
||||
Message msg = new Message();
|
||||
msg.what = NOTIFY;
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("DATA", "发送失败:" + e.getMessage());
|
||||
msg.setData(bundle);
|
||||
handError.sendMessage(msg);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResponse(Call call, Response response) throws IOException {
|
||||
final String responseStr = response.body().string();
|
||||
Log.d(TAG, "Code:" + response.code() + responseStr);
|
||||
|
||||
if (handError != null) {
|
||||
Message msg = new Message();
|
||||
msg.what = NOTIFY;
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("DATA", "发送状态:" + responseStr);
|
||||
msg.setData(bundle);
|
||||
handError.sendMessage(msg);
|
||||
Log.d(TAG, "Response:" + response.code() + responseStr);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="设置名称" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/editTextServerChanName"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="3dp"
|
||||
android:ems="11"
|
||||
android:inputType=""
|
||||
android:text="" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="设置Server酱·Turbo版的SendKey" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/editTextServerChanSendKey"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="14"
|
||||
android:inputType=""
|
||||
android:text="" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="10dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttonServerChanOk"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/ok" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttonServerChanDel"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/del" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttonServerChanTest"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/test" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
Binary file not shown.
After Width: | Height: | Size: 4.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 5.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
After Width: | Height: | Size: 8.2 KiB |
|
@ -7,5 +7,6 @@
|
|||
<item>转发到Webhook</item>
|
||||
<item>转发到企业微信群机器人</item>
|
||||
<item>转发到企业微信应用消息</item>
|
||||
<item>转发到Server酱·Turbo版</item>
|
||||
</string-array>
|
||||
</resources>
|
|
@ -12,6 +12,7 @@
|
|||
<string name="setqywxgrouprobottitle">设置企业微信群机器人</string>
|
||||
<string name="setqywxapptitle">设置企业微信应用</string>
|
||||
<string name="setbarktitle">设置Bark</string>
|
||||
<string name="setserverchantitle">设置Server酱·Turbo版</string>
|
||||
<string name="check_new_version">检查更新</string>
|
||||
<string name="to_setting">设置</string>
|
||||
<string name="to_about">关于</string>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
ext {
|
||||
appVersionCode = 16
|
||||
appVersionName = "1.6.0"
|
||||
appVersionCode = 17
|
||||
appVersionName = "1.6.1"
|
||||
}
|
BIN
psd/xxxhdpi.psd
BIN
psd/xxxhdpi.psd
Binary file not shown.
Loading…
Reference in New Issue