Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修复SMS检索器API_Javascript_Android_Api_Android Studio - Fatal编程技术网

Javascript 如何修复SMS检索器API

Javascript 如何修复SMS检索器API,javascript,android,api,android-studio,Javascript,Android,Api,Android Studio,我编写了一些代码,例如“SMS Retreiver API” 但我不会得到我不会得到的结果 此代码将传递给MainActivity SmsRetrieverClient client = SmsRetriever.getClient(this); Task<Void> task = client.startSmsRetriever(); task.addOnSuccessListener(new OnSuccessLis

我编写了一些代码,例如“SMS Retreiver API” 但我不会得到我不会得到的结果

此代码将传递给MainActivity

SmsRetrieverClient client = SmsRetriever.getClient(this);
                Task<Void> task = client.startSmsRetriever();
                task.addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                    }
                });
                    task.addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                       }
                    });
在我的舱单上

<receiver android:name="ru.project.MBank.MySMSBroadcastReceiver" android:exported="true">
            <intent-filter>
                <action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
            </intent-filter>
        </receiver>

但结果一无所获。
我做错了什么?我也有同样的问题。首先,您需要生成一个唯一的密钥(应用程序签名),用于标识消息和您的设备。生成密钥后,播音员将能够检测消息

public class AppSignature extends ContextWrapper {
public static final String TAG = AppSignature.class.getSimpleName();

private static final String HASH_TYPE = "SHA-256";
public static final int NUM_HASHED_BYTES = 9;
public static final int NUM_BASE64_CHAR = 11;

public AppSignature(Context context) {
    super(context);
}

/**
 * Get all the app signatures for the current package
 * @return
 */
public ArrayList<String> getAppSignatures() {
    ArrayList<String> appCodes = new ArrayList<>();

    try {
        // Get all package signatures for the current package
        String packageName = getPackageName();
        PackageManager packageManager = getPackageManager();
        Signature[] signatures = packageManager.getPackageInfo(packageName,
                PackageManager.GET_SIGNATURES).signatures;

        // For each signature create a compatible hash
        for (Signature signature : signatures) {
            String hash = hash(packageName, signature.toCharsString());
            if (hash != null) {
                appCodes.add(String.format("%s", hash));
            }
        }
    } catch (PackageManager.NameNotFoundException e) {
        Log.e(TAG, "Unable to find package to obtain hash.", e);
    }
    return appCodes;
}

private static String hash(String packageName, String signature) {
    String appInfo = packageName + " " + signature;
    try {
        MessageDigest messageDigest = MessageDigest.getInstance(HASH_TYPE);
        messageDigest.update(appInfo.getBytes(StandardCharsets.UTF_8));
        byte[] hashSignature = messageDigest.digest();

        // truncated into NUM_HASHED_BYTES
        hashSignature = Arrays.copyOfRange(hashSignature, 0, NUM_HASHED_BYTES);
        // encode into Base64
        String base64Hash = Base64.encodeToString(hashSignature, Base64.NO_PADDING | Base64.NO_WRAP);
        base64Hash = base64Hash.substring(0, NUM_BASE64_CHAR);
        return base64Hash;
    } catch (NoSuchAlgorithmException e) {
    }
    return null;
}
公共类AppSignature扩展了ContextWrapper{
公共静态最终字符串标记=AppSignature.class.getSimpleName();
私有静态最终字符串哈希_TYPE=“SHA-256”;
公共静态final int NUM_HASHED_BYTES=9;
公共静态最终int NUM_BASE64_CHAR=11;
公共AppSignature(上下文){
超级(上下文);
}
/**
*获取当前包的所有应用程序签名
*@返回
*/
公共ArrayList getAppSignatures(){
ArrayList appCodes=新的ArrayList();
试一试{
//获取当前包的所有包签名
字符串packageName=getPackageName();
PackageManager PackageManager=getPackageManager();
Signature[]signatures=packageManager.getPackageInfo(packageName,
PackageManager.GET_签名)。签名;
//为每个签名创建一个兼容的哈希
用于(签名:签名){
String hash=hash(packageName,signature.tocharstring());
if(散列!=null){
add(String.format(“%s”,散列));
}
}
}捕获(PackageManager.NameNotFounde异常){
Log.e(标记“无法找到获取哈希的包”,e);
}
返回应用程序代码;
}
私有静态字符串哈希(字符串packageName、字符串签名){
字符串appInfo=packageName+“”+签名;
试一试{
MessageDigest=MessageDigest.getInstance(哈希类型);
update(appInfo.getBytes(StandardCharsets.UTF_8));
字节[]hashSignature=messageDigest.digest();
//截断为NUM_散列字节
hashSignature=Arrays.copyOfRange(hashSignature,0,NUM\u散列字节);
//编码成Base64
字符串base64Hash=Base64.encodeToString(hashSignature,Base64.NO_PADDING | Base64.NO_WRAP);
base64Hash=base64Hash.substring(0,NUM\u BASE64\u CHAR);
返回base64Hash;
}捕获(无算法异常){
}
返回null;
}
}

在这之后,在你的第一次活动中开始这门课。
希望这对你有帮助。

你能帮我吗?在MainActivity中,此代码在何处过期?我试过了,但没有成功。创建单独的类AppSignature并将此代码粘贴到该类。在你的主要活动之后创建这个类的对象。你好!帮帮我,我无法解析短信检索器。你在应用程序中添加依赖项了吗?如果尚未添加依赖项,请添加实现“com.google.android.gms:play services auth:16.0.1”
public class AppSignature extends ContextWrapper {
public static final String TAG = AppSignature.class.getSimpleName();

private static final String HASH_TYPE = "SHA-256";
public static final int NUM_HASHED_BYTES = 9;
public static final int NUM_BASE64_CHAR = 11;

public AppSignature(Context context) {
    super(context);
}

/**
 * Get all the app signatures for the current package
 * @return
 */
public ArrayList<String> getAppSignatures() {
    ArrayList<String> appCodes = new ArrayList<>();

    try {
        // Get all package signatures for the current package
        String packageName = getPackageName();
        PackageManager packageManager = getPackageManager();
        Signature[] signatures = packageManager.getPackageInfo(packageName,
                PackageManager.GET_SIGNATURES).signatures;

        // For each signature create a compatible hash
        for (Signature signature : signatures) {
            String hash = hash(packageName, signature.toCharsString());
            if (hash != null) {
                appCodes.add(String.format("%s", hash));
            }
        }
    } catch (PackageManager.NameNotFoundException e) {
        Log.e(TAG, "Unable to find package to obtain hash.", e);
    }
    return appCodes;
}

private static String hash(String packageName, String signature) {
    String appInfo = packageName + " " + signature;
    try {
        MessageDigest messageDigest = MessageDigest.getInstance(HASH_TYPE);
        messageDigest.update(appInfo.getBytes(StandardCharsets.UTF_8));
        byte[] hashSignature = messageDigest.digest();

        // truncated into NUM_HASHED_BYTES
        hashSignature = Arrays.copyOfRange(hashSignature, 0, NUM_HASHED_BYTES);
        // encode into Base64
        String base64Hash = Base64.encodeToString(hashSignature, Base64.NO_PADDING | Base64.NO_WRAP);
        base64Hash = base64Hash.substring(0, NUM_BASE64_CHAR);
        return base64Hash;
    } catch (NoSuchAlgorithmException e) {
    }
    return null;
}