标签: android-sms

Android短信内容(内容://短信/发送)

我在从设备上阅读短信时遇到问题.当获取URI' content://sms/inbox' 的内容提供者时,一切都很好,我可以阅读"人员"列,找到人员表中的外键并最终到达联系人及其姓名.

但是,我也想遍历发送的消息.从'content:// sms/sent'读取时,person字段始终显示为0.这是正确读取的字段,以查找已发送邮件的收件人数据吗?如果是这样 - 任何想法为什么我的总是0?

我的所有测试都是在模拟器中完成的,我创建了3个联系人.我以正常方式向您发送消息的模拟器发送了消息.

重申一下,我可以看到4个发送的消息,并阅读相关的正文.我的问题是我似乎无法阅读"人"ID,因此我无法确定收件人是谁.

任何帮助将不胜感激.

非常感谢,

马丁.

android contacts android-sms

20
推荐指数
1
解决办法
2万
查看次数

Android Device Monitor依赖于旧版Java SE 6运行时

对于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

10
推荐指数
1
解决办法
817
查看次数

为什么SMS Retriever API在发布模式下不起作用?

我已经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

10
推荐指数
3
解决办法
3864
查看次数

使用SMS Retriever API Android的OTP / SMS自动获取问题

我正在尝试使用Google的SMS检索器API进行自动SMS验证,但是其中存在问题。以前,我使用读取发件人编号getOriginatingAddress(),如果它是有效的发件人编号,则读取OTP,否则不读取消息。作为,转发的OTP会干扰用户的隐私。

我有以下情况。

我的应用程序正在自动获取转发的OTP消息。

  •  用户A在其手机上安装了应用,然后输入用户B的手机号码。
  •  用户B收到OTP并将其转发给用户A。
  • 应用程序在用户A手机上读取OTP并进入主屏幕。

有什么办法可以获取发件人号码?

sms android smsmanager android-sms sms-retriever-api

8
推荐指数
1
解决办法
267
查看次数

Android:打开短信意图

在我的 Android 应用程序中,我只需要使用预先填充的message_bodyPhoneNumber打开 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)

问题

  1. 即使有人将任何其他 3rd 方 SMS 应用程序设置为默认应用程序,我是否也可以强制打开默认的 Android SMS 应用程序(消息应用程序)?
  2. 或者我可以通过任何其他方式传递 message_body 参数以在其他 3rd 方应用程序中工作吗?

android facebook android-intent android-facebook android-sms

6
推荐指数
1
解决办法
3802
查看次数

android消息传递的源代码

我打算创建一个用户可以为他们的SMS安全的应用程序.我有可能看到Android手机短信的源代码吗?怎么样?

android-source android-sms

5
推荐指数
3
解决办法
2万
查看次数

为什么SmsManager在某些设备上需要READ_PHONE_STATE权限而在其他设备上不需要?

该应用程序使用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 android-permissions android-sms

5
推荐指数
1
解决办法
1560
查看次数

Android Wear OS应用程序振动有时不起作用

我正在开发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)

android android-vibration android-sms wear-os

5
推荐指数
0
解决办法
140
查看次数

新短信检索器 API 的广播响应延迟

最近我们决定开始使用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

5
推荐指数
0
解决办法
500
查看次数

每次获取不同App的Hash String | 短信检索API

我正在将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 android-sms sms-retriever-api

5
推荐指数
1
解决办法
1457
查看次数

检测传入的 SMS 消息

在我的 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)

sms android broadcastreceiver android-sms

1
推荐指数
1
解决办法
5370
查看次数