我在从设备上阅读短信时遇到问题.当获取URI' content://sms/inbox
' 的内容提供者时,一切都很好,我可以阅读"人员"列,找到人员表中的外键并最终到达联系人及其姓名.
但是,我也想遍历发送的消息.从'content:// sms/sent'读取时,person字段始终显示为0.这是正确读取的字段,以查找已发送邮件的收件人数据吗?如果是这样 - 任何想法为什么我的总是0?
我的所有测试都是在模拟器中完成的,我创建了3个联系人.我以正常方式向您发送消息的模拟器发送了消息.
重申一下,我可以看到4个发送的消息,并阅读相关的正文.我的问题是我似乎无法阅读"人"ID,因此我无法确定收件人是谁.
任何帮助将不胜感激.
非常感谢,
马丁.
对于Android Studio v2.2,不推荐使用DDMS,而选择Android Device Monitor.但是当我尝试打开监视器时,它没有打开,因为它依赖于遗留的Java SE 6运行时,这在我的Mac Os Sierra中缺失.这太疯狂了,不是吗?
我想尝试模拟传入的短信,从监视器到模拟器的电话.此监视器不适用于jdk 7/8.出路是什么?
android android-studio-2.2 android-sms android-monitor android-phone-call
我已经SMS Retriever API
在谷歌教程和我的调试Build Variant工作中实现了类似的工作.我可以读取短信并获取用户可以登录的代码.
我的问题是,当我在发布版本Variant中运行应用程序sms它不起作用.我收到了短信,但我无法读取代码进行登录.
我在发布模式下更改了AppSignatureHelper生成的哈希,该模式与调试模式不同.在调试工作和发布没有.
一些帮助将是欣赏
代码:
表现:
<receiver android:name=".app.receivers.SmsReceiver">
<intent-filter>
<action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
在我的类中:(在发布和调试模式下,代码将抛出onSucess方法)此方法在onCreate中调用.
private void startSMSListening(){
SmsRetrieverClient client = SmsRetriever.getClient(this);
Task<Void> task = client.startSmsRetriever();
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Successfully started retriever, expect broadcast intent
Log.e("startSMSListening", "listening sms");
sendCode();
showHideLoadingView(false);
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Failed to start retriever, inspect Exception for more details
Log.e("startSMSListening", "failure listening …
Run Code Online (Sandbox Code Playgroud) android android-intent android-broadcast android-broadcastreceiver android-sms
我正在尝试使用Google的SMS检索器API进行自动SMS验证,但是其中存在问题。以前,我使用读取发件人编号getOriginatingAddress()
,如果它是有效的发件人编号,则读取OTP,否则不读取消息。作为,转发的OTP会干扰用户的隐私。
我有以下情况。
我的应用程序正在自动获取转发的OTP消息。
有什么办法可以获取发件人号码?
在我的 Android 应用程序中,我只需要使用预先填充的message_body和PhoneNumber打开 SMS 意图。
以下是我正在尝试的代码
Uri uri = Uri.parse(String.format("smsto:%s", strPhoneNumber));
Intent smsIntent = new Intent(Intent.ACTION_SENDTO, uri);
smsIntent.putExtra("sms_body", "Sample Body");
startActivityForResult(smsIntent, OPEN_SMS_APP);
Run Code Online (Sandbox Code Playgroud)
在默认情况下一切都很好,但是如果安装了Facebook Messenger并将其设置为默认的 SMS 应用程序(设置 -> 应用程序和通知 -> 默认应用程序 -> SMS 应用程序),则功能会中断。
问题是,即使它正确选择了电话号码(在 FB Messenger APP 中),它也会在没有message_body(空)的情况下打开FB Messenger。
此外,我尝试了以下测试但没有选择 SMS_BODY 或打开默认的 Android APP
smsIntent.addCategory(Intent.CATEGORY_APP_MESSAGING); // STILL DIDN'T FIX
smsIntent.putExtra(Intent.EXTRA_TEXT, "Sample Body"); // STILL DIDN'T FIX
Run Code Online (Sandbox Code Playgroud)
问题
android facebook android-intent android-facebook android-sms
我打算创建一个用户可以为他们的SMS安全的应用程序.我有可能看到Android手机短信的源代码吗?怎么样?
该应用程序使用SmsManager发送短信.仅在成功从用户获取SEND_SMS运行时权限后才调用以下方法.该应用针对API 25.
public static void sendSmsTextMessage(Context context, String number, String message) {
SmsManager sms = SmsManager.getDefault();
int permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.SEND_SMS);
if (permissionCheck == PERMISSION_DENIED) {
Timber.e("Permission to send SMS denied");
} else {
sms.sendTextMessage(number, null, message, null, null);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,它已经在所有已经过测试的设备上运行良好.但它现在已经被用在手机上,Logicom L-EMENT 553,当试图在API 23(Marshmallow)上调用sendTextMessage()时,应用程序会爆炸,但是有以下异常:
Exception java.lang.RuntimeException: Failure delivering result
ResultInfo{who=@android:requestPermissions:, request=1, result=-1,
data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has
extras) }} to activity
{com.myapp.android/com.myapp.android.ui.bet.BetActivity}:
java.lang.SecurityException: Neither user 10108 nor current process
has android.permission.READ_PHONE_STATE.
Run Code Online (Sandbox Code Playgroud)
为什么在某些设备上需要READ_PHONE_STATE权限,而在发送短信时却不需要其他设备?显然,最好不要求此权限,因为用户提出这种访问级别是一个很大的要求.
这里问题的答案为什么sendTextMessage需要READ_PHONE_STATE权限?建议一些Android版本包含一个请求此权限的错误,但这是或者sendTextMessage()方法是否通过长度限制传递消息,然后继续使用divideMessage()然后请求此权限拆分它?虽然说过我没有看到任何证据,但sendMessage()会自动将长消息拆分成较小的片段并发送它们.
我正在开发Android Wear OS 2.0应用程序.每当用户从给定号码获得SMS时,手表应该开始振动,并且应该出现具有给定文本的UI,其具有停止振动的按钮.它的工作方式如下:
在SmsReciever.java
我正在检查电话号码是否匹配,或者UI屏幕是否已经激活.
public class SmsReceiver extends BroadcastReceiver {
//interface
private static SmsListener mListener;
@Override
public void onReceive(Context context, Intent intent) {
Bundle data = intent.getExtras();
Object[] pdus = (Object[]) data.get("pdus");
for(int i=0;i<pdus.length;i++){
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i], "3gpp");
String sender = smsMessage.getDisplayOriginatingAddress();
String alertPhoneNumber = "301112233";
if (sender.toLowerCase().contains(alertPhoneNumber.toLowerCase()))
{
String messageBody = smsMessage.getMessageBody();
//Pass the message text to interface
mListener.messageReceived(messageBody);
} else if (AlarmActivity.active) {
Intent intent1 = new Intent();
intent1.setClassName("hu.asd.watchtest", "hu.asd.watchtest.AlarmActivity");
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
} …
Run Code Online (Sandbox Code Playgroud) 最近我们决定开始使用SMS Retriever API来读取 OTP。我遵循了所有步骤并且它工作正常。
问题是在长时间延迟后BroadcastReceiver
得到回调。一旦实际收到短信,系统就会推送短信通知。但是,接收者将在大约一分钟后收到它。
在三星 J3 emerge 上测试。Android 6.0.1、PlayServices 14.5.81。
有人遇到过这个问题吗?API 是否存在接收者优先级问题或任何其他限制?
android android-intent android-broadcast android-broadcastreceiver android-sms
我正在将SMS Retriever API集成到我的 Android 应用程序中。
我按照以下文档生成应用程序的哈希字符串:
https://developers.google.com/identity/sms-retriever/verify#computing_your_apps_hash_string
生成Hash的方式如下:
1)命令
keytool -exportcert -alias MyAndroidKey -keystore MyProductionKeys.keystore | xxd -p | tr -d "[:space:]" | echo -n com.example.myapp `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
Run Code Online (Sandbox Code Playgroud)
2)AppSignatureHelper类
我为不同的方法得到了不同的哈希值
prodRelease(使用命令) - R2J********N
prodRelease(使用 AppSignatureHelper 类) - ROI********6
以及不同构建变体的不同哈希值。
prodRelease: ROI********6
prodDebug: CAz********N
devRelease: R2J********N
devDebug: ROI********6 (与 prodRelease 相同)
我使用 SMS 模板和 prodRelease 哈希(即ROI********6 ) …
在我的 android 代码中,我试图检测传入的 SMS 消息。下面的代码已经运行了 2 年,但现在它停止工作了。我错过了哪些更新?
public class SmsListener extends BroadcastReceiver {
private String msgBody;
private SharedPreferences preferences;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
Toast.makeText(context,"message received",Toast.LENGTH_SHORT).show();
Bundle bundle = intent.getExtras(); //---get the SMS message passed in---
SmsMessage[] msgs = null;
String msg_from;
if (bundle != null){
//---retrieve the SMS message received---
try{
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]);
msg_from = msgs[i].getOriginatingAddress(); …
Run Code Online (Sandbox Code Playgroud)