java - 我的安卓应用程序在接收短信时无法打开浏览器,我该怎么办?
问题描述
我的 android 应用程序将检测到接收短信,然后打开浏览器以重定向到 url。
对于这种情况,重定向到https://www.example.com/test.php?details=[sms details]&sender=[sms sender name or number]
但这不起作用,我该怎么办?
我很确定我的编码是正确的。但这是行不通的。
..................................................... ..................................................... ...................................................
这是 MainActivity.java
package com.jawad.smsapp;
import android.Manifest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.DexterBuilder;
import com.karumi.dexter.MultiplePermissionsReport;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
import com.karumi.dexter.listener.single.PermissionListener;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Dexter.withActivity(this)
.withPermissions(Manifest.permission.INTERNET,
Manifest.permission.READ_SMS,
Manifest.permission.RECEIVE_SMS)
.withListener(new MultiplePermissionsListener() {
@Override
public void onPermissionsChecked(MultiplePermissionsReport report) {
Toast.makeText(MainActivity.this,"Permission Granted ",Toast.LENGTH_LONG).show();
}
@Override
public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
}
}).check();
}
}
这是 Sms.java
package com.jawad.smsapp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Telephony;
import android.support.annotation.RequiresApi;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
public class Sms extends BroadcastReceiver{
private String TAG = Sms.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
try {
Log.d(TAG, "onReceive: ");
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
String messag = new String();
String sender = new String();
SmsMessage[] smsMessages = new SmsMessage[0];
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
smsMessages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
}
if (smsMessages == null) {
Toast.makeText(context, "Smsmessages empty", Toast.LENGTH_LONG).show();
return;
}
for (SmsMessage message : smsMessages) {
messag = message.getDisplayMessageBody();
sender = message.getDisplayOriginatingAddress();
Log.d(TAG, "onReceive: " + message.getDisplayMessageBody());
Log.d(TAG, "onReceive: " + message.getDisplayOriginatingAddress());
}
String url = "https://www.example.com/test.php?details=" + messag + "&sender=" + sender;
Intent intent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
Log.d(TAG, "onReceive: " + intent1.resolveActivity(context.getPackageManager()));
if (intent1.resolveActivity(context.getPackageManager()) != null) {
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}
}}catch(Exception e)
{
Toast.makeText(context,e.toString(),Toast.LENGTH_LONG).show();
}
}
}
解决方案
推荐阅读
- css - Grunt Livereload 仅重新加载样式
- angular - Angular:在运行时向 div 添加工具提示
- java - 为什么 `print(String)` 等到换行后再打印到控制台(Kotlin)?
- python - 从线程导入模块不起作用
- .net - 我无法从字符串中打印字符
- mongodb - 了解 MongoDB Atlas 中的 MongoDB 存储大小、磁盘空间、数据库大小
- c++ - 在用户选择一个选项并且代码完成后,如何使我的菜单返回到原始显示?
- r - 在 R/dplyr 中的行之间动态更新变量
- react-native - 为什么我的导航引用没有在 React Navigation 6 和 Redux 中准备好?
- flutter - 在 Flutter 中运行多个集成测试