
{"id":382,"date":"2016-04-28T12:39:01","date_gmt":"2016-04-28T04:39:01","guid":{"rendered":"http:\/\/www.jiandaima.com\/blog\/?p=382"},"modified":"2016-11-07T10:39:21","modified_gmt":"2016-11-07T02:39:21","slug":"android%e7%9f%ad%e4%bf%a1%e6%94%b6%e5%88%b0%ef%bc%8c%e8%af%ad%e9%9f%b3%e6%92%ad%e6%8a%a5","status":"publish","type":"post","link":"http:\/\/www.jiandaima.com\/blog\/archives\/382.html","title":{"rendered":"Android\u77ed\u4fe1\u6536\u5230\uff0c\u8bed\u97f3\u64ad\u62a5"},"content":{"rendered":"<p>\u53d1\u9001\u77ed\u4fe1\u529f\u80fd\u754c\u9762<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\/**\r\n * \u53d1\u9001\u77ed\u4fe1Demo\r\n * \r\n * @description\uff1a\r\n * @author ldm\r\n * @date 2016-4-22 \u4e0a\u53489:07:53\r\n *\/\r\npublic class SmsActivity extends Activity implements OnClickListener {\r\n    public static final String SMS_RECIPIENT_EXTRA = &quot;com.ldm.study.SMS_RECIPIENT&quot;;\r\n    public static final String ACTION_SMS_SENT = &quot;com.ldm.study.SMS_SENT_ACTION&quot;;\r\n    private Button sms_send_message;\r\n    private EditText sms_recipient;\r\n    private EditText sms_content;\r\n    private CheckBox sms_enable_receiver;\r\n    private TextView sms_status;\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.send_sms_layout);\r\n        initViews();\r\n        initListeners();\r\n        registerSmsReceiver();\r\n\r\n    }\r\n\r\n    \/**\r\n     * \u6ce8\u518c\u77ed\u4fe1\u76d1\u542c\u5e7f\u64ad\r\n     * \r\n     * @description\uff1a\r\n     * @author ldm\r\n     * @date 2016-4-22 \u4e0a\u53489:23:23\r\n     *\/\r\n    private void registerSmsReceiver() {\r\n        registerReceiver(new BroadcastReceiver() {\r\n            @Override\r\n            public void onReceive(Context context, Intent intent) {\r\n                String message = null;\r\n                boolean error = true;\r\n                switch (getResultCode()) {\r\n                case Activity.RESULT_OK:\r\n                    message = &quot;\u53d1\u9001\u6210\u529f!&quot;;\r\n                    error = false;\r\n                    break;\r\n                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:\r\n                    message = &quot;\u53d1\u9001\u5931\u8d25&quot;;\r\n                    break;\r\n                case SmsManager.RESULT_ERROR_NO_SERVICE:\r\n                    message = &quot;\u53d1\u9001\u5931\u8d25&quot;;\r\n                    break;\r\n                case SmsManager.RESULT_ERROR_NULL_PDU:\r\n                    message = &quot;\u53d1\u9001\u5931\u8d25&quot;;\r\n                    break;\r\n                case SmsManager.RESULT_ERROR_RADIO_OFF:\r\n                    message = &quot;\u53d1\u9001\u5931\u8d25&quot;;\r\n                    break;\r\n                }\r\n\r\n                sms_recipient.setEnabled(true);\r\n                sms_content.setEnabled(true);\r\n                sms_content.setText(&quot;&quot;);\r\n\r\n                sms_status.setText(message);\r\n                sms_status.setTextColor(error ? Color.RED : Color.GREEN);\r\n            }\r\n        }, new IntentFilter(ACTION_SMS_SENT));\r\n    }\r\n\r\n    \/**\r\n     * \u76d1\u542c\u4e8b\u4ef6\r\n     * \r\n     * @description\uff1a\r\n     * @author ldm\r\n     * @date 2016-4-22 \u4e0a\u53489:24:20\r\n     *\/\r\n    private void initListeners() {\r\n        sms_send_message.setOnClickListener(this);\r\n        \/\/ \u5e94\u7528Package\u7ba1\u7406\u5668\r\n        final PackageManager pm = this.getPackageManager();\r\n        \/\/ \u83b7\u53d6\u5230\u5e94\u7528\u4e2d\u6307\u5b9a\u7684\u7ec4\u4ef6\r\n        final ComponentName componentName = new ComponentName(&quot;com.ldm.study&quot;,\r\n                &quot;com.ldm.study.receiver.SmsMessageReceiver&quot;);\r\n        \/\/ \u6839\u636e\u7ec4\u4ef6\u662f\u5426\u53ef\u7528\u7684\u72b6\u6001\u6765\u5224\u65adsms_enable_receiver\u7684\u9009\u4e2d\u72b6\u6001\r\n        sms_enable_receiver\r\n                .setChecked(pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED);\r\n        \/\/ \u76d1\u542csms_enable_receiver\u8bbe\u7f6e\u5e7f\u64ad\u7ec4\u4ef6\u662f\u5426\u53ef\u7528\r\n        sms_enable_receiver\r\n                .setOnCheckedChangeListener(new OnCheckedChangeListener() {\r\n                    public void onCheckedChanged(CompoundButton buttonView,\r\n                            boolean isChecked) {\r\n                        \/\/ \u7ec4\u4ef6\u72b6\u6001\u8bbe\u7f6e\r\n                        pm.setComponentEnabledSetting(\r\n                                componentName,\r\n                                isChecked ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED\r\n                                        : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,\r\n                                PackageManager.DONT_KILL_APP);\r\n                    }\r\n                });\r\n\r\n    }\r\n\r\n    private void initViews() {\r\n        sms_recipient = (EditText) (findViewById(R.id.sms_recipient));\r\n        sms_content = ((EditText) findViewById(R.id.sms_content));\r\n        \/\/ \u662f\u5426\u6253\u5f00\u77ed\u4fe1\u5e7f\u64ad\u63a5\u6536\u5f00\u5173\r\n        sms_enable_receiver = (CheckBox) findViewById(R.id.sms_enable_receiver);\r\n        sms_send_message = (Button) findViewById(R.id.sms_send_message);\r\n        sms_status = (TextView) findViewById(R.id.sms_status);\r\n        if (getIntent().hasExtra(SMS_RECIPIENT_EXTRA)) {\r\n            sms_recipient.setText(getIntent().getExtras().getString(\r\n                    SMS_RECIPIENT_EXTRA));\r\n            sms_content.requestFocus();\r\n        }\r\n    }\r\n\r\n    @Override\r\n    public void onClick(View v) {\r\n        if (v.getId() == R.id.sms_send_message) {\r\n            sendSms();\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u53d1\u9001\u77ed\u4fe1\r\n     * \r\n     * @description\uff1a\r\n     * @author ldm\r\n     * @date 2016-4-22 \u4e0a\u53489:30:38\r\n     *\/\r\n    private void sendSms() {\r\n\r\n        if (TextUtils.isEmpty(sms_recipient.getText())) {\r\n            Toast.makeText(SmsActivity.this, &quot;\u8bf7\u8f93\u5165\u77ed\u4fe1\u63a5\u6536\u8005&quot;, Toast.LENGTH_SHORT)\r\n                    .show();\r\n            return;\r\n        }\r\n\r\n        if (TextUtils.isEmpty(sms_content.getText())) {\r\n            Toast.makeText(SmsActivity.this, &quot;\u8bf7\u8f93\u5165\u77ed\u4fe1\u5185\u5bb9&quot;, Toast.LENGTH_SHORT)\r\n                    .show();\r\n            return;\r\n        }\r\n\r\n        sms_recipient.setEnabled(false);\r\n        sms_content.setEnabled(false);\r\n\r\n        SmsManager sms = SmsManager.getDefault();\r\n\r\n        List&lt;String&gt; messages = sms.divideMessage(sms_recipient.getText()\r\n                .toString());\r\n\r\n        String recipient = sms_content.getText().toString();\r\n        for (String message : messages) {\r\n            \/\/ \u53d1\u9001\u77ed\u4fe1\r\n            sms.sendTextMessage(recipient, null, message, PendingIntent\r\n                    .getBroadcast(SmsActivity.this, 0, new Intent(\r\n                            ACTION_SMS_SENT), 0), null);\r\n        }\r\n\r\n    }\r\n}\r\n<\/pre>\n<p>\u6536\u5230\u77ed\u4fe1\u540e\u5904\u7406\u754c\u9762\uff1a<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\/**\r\n * \u63a5\u6536\u77ed\u4fe1\u8bed\u97f3\u64ad\u62a5\r\n * \r\n * @description\uff1a\r\n * @author ldm\r\n * @date 2016-4-22 \u4e0a\u53489:34:21\r\n *\/\r\npublic class SmsReceivedActivity extends Activity implements OnInitListener {\r\n\r\n    private static final int DIALOG_SHOW_MESSAGE = 1;\r\n\r\n    public static final String SMS_FROM_ADDRESS_EXTRA = &quot;com.ldm.study.SMS_FROM_ADDRESS&quot;;\r\n    public static final String SMS_FROM_DISPLAY_NAME_EXTRA = &quot;com.ldm.study.SMS_FROM_DISPLAY_NAME&quot;;\r\n    public static final String SMS_MESSAGE_EXTRA = &quot;com.ldm.study.SMS_MESSAGE&quot;;\r\n\r\n    private TextToSpeech mTts;\r\n\r\n    private String mFromDisplayName;\r\n    private String mFromAddress;\r\n    private String mMessage;\r\n    private String mFullBodyString;\r\n\r\n    @SuppressWarnings(&quot;deprecation&quot;)\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        \/\/ \u77ed\u4fe1\u6765\u7535\u53f7\u7801\r\n        mFromAddress = getIntent().getExtras()\r\n                .getString(SMS_FROM_ADDRESS_EXTRA);\r\n        \/\/ \u6765\u7535\u4eba\u79f0\u547c\r\n        mFromDisplayName = getIntent().getExtras().getString(\r\n                SMS_FROM_DISPLAY_NAME_EXTRA);\r\n        mMessage = getIntent().getExtras().getString(SMS_MESSAGE_EXTRA);\r\n        \/\/ \u77ed\u4fe1\u5185\u5bb9\r\n        mFullBodyString = String.format(getString(R.string.sms_format),\r\n                mFromDisplayName, mMessage);\r\n\r\n        showDialog(DIALOG_SHOW_MESSAGE);\r\n        \/\/\u521d\u59cb\u5316TTS\r\n        mTts = new TextToSpeech(this, this);\r\n    }\r\n\r\n    \/**\r\n     * \u521d\u59cb\u5316TTS\u670d\u52a1\r\n     *\/\r\n    @SuppressWarnings(&quot;deprecation&quot;)\r\n    public void onInit(int status) {\r\n        if (status == TextToSpeech.SUCCESS) {\/\/ \u6210\u529f\u72b6\u6001\r\n            \/\/ \u8bbe\u7f6e\u8bed\u8a00\uff0cTTS\u5f15\u64ce\u652f\u6301 English\u3001 French \u3001 German \u3001 Italian \u548c Spanish \u8fd95\u5927\u8bed\u8a00\r\n            int result = mTts.setLanguage(Locale.ENGLISH);\r\n            if (result == TextToSpeech.LANG_MISSING_DATA\r\n                    || result == TextToSpeech.LANG_NOT_SUPPORTED) {\r\n                Toast.makeText(this, &quot;TTS\u4e0d\u53ef\u7528&quot;, Toast.LENGTH_LONG).show();\r\n            } else {\r\n                mTts.speak(mFullBodyString, TextToSpeech.QUEUE_ADD, null);\r\n                \/\/ mTts.speak(mFullBodyString, TextToSpeech.QUEUE_ADD, null,\r\n                \/\/ &quot;&quot;);\r\n            }\r\n        } else {\r\n            Toast.makeText(this, &quot;TTS\u521d\u59cb\u5316\u5931\u8d25&quot;, Toast.LENGTH_LONG).show();\r\n        }\r\n    }\r\n\r\n    @Override\r\n    protected Dialog onCreateDialog(int id) {\r\n        switch (id) {\r\n        case DIALOG_SHOW_MESSAGE:\r\n            return new AlertDialog.Builder(this)\r\n                    .setIcon(android.R.drawable.ic_dialog_email)\r\n                    .setTitle(&quot;Message Received&quot;)\r\n                    .setMessage(mFullBodyString)\r\n                    .setPositiveButton(&quot;\u56de\u590d&quot;,\r\n                            new DialogInterface.OnClickListener() {\r\n                                public void onClick(DialogInterface dialog,\r\n                                        int whichButton) {\r\n                                    \/\/ \u56de\u590d\u77ed\u4fe1\u5219\u8df3\u8f6c\u5230\u53d1\u9001\u77ed\u4fe1\u754c\u9762\uff0c\u628a\u63a5\u6536\u4eba\u4fe1\u606f\u5e26\u8fc7\u53bb\r\n                                    Intent i = new Intent();\r\n                                    i.setClass(SmsReceivedActivity.this,\r\n                                            SmsActivity.class);\r\n                                    i.putExtra(SmsActivity.SMS_RECIPIENT_EXTRA,\r\n                                            mFromAddress);\r\n                                    startActivity(i);\r\n\r\n                                    dialog.dismiss();\r\n                                    finish();\r\n                                }\r\n                            })\r\n                    .setNegativeButton(&quot;\u53d6\u6d88&quot;,\r\n                            new DialogInterface.OnClickListener() {\r\n                                public void onClick(DialogInterface dialog,\r\n                                        int whichButton) {\r\n                                    dialog.dismiss();\r\n                                    finish();\r\n                                }\r\n                            }).create();\r\n        }\r\n        return null;\r\n    }\r\n}\r\n<\/pre>\n<p>\u77ed\u4fe1\u5e7f\u64ad<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\/**\r\n * \u77ed\u4fe1\u6765\u4fe1\u76d1\u542c\u5e7f\u64ad\r\n * \r\n * @description\uff1a\r\n * @author ldm\r\n * @date 2016-4-22 \u4e0a\u534810:07:49\r\n *\/\r\npublic class MyMsmReceiver extends BroadcastReceiver {\r\n\r\n    @Override\r\n    public void onReceive(Context context, Intent intent) {\r\n        Bundle extras = intent.getExtras();\r\n        if (extras == null)\r\n            return;\r\n        \/\/ \u6536\u5230\u7684\u77ed\u4fe1\u5185\u5bb9\r\n        Object&#x5B;] pdus = (Object&#x5B;]) extras.get(&quot;pdus&quot;);\r\n\r\n        for (int i = 0; i &lt; pdus.length; i++) {\r\n            SmsMessage message = SmsMessage.createFromPdu((byte&#x5B;]) pdus&#x5B;i]);\r\n            String fromAddress = message.getOriginatingAddress();\r\n            String fromDisplayName = fromAddress;\r\n\r\n            Uri uri;\r\n            String&#x5B;] projection;\r\n\r\n            uri = Uri.withAppendedPath(\r\n                    ContactsContract.PhoneLookup.CONTENT_FILTER_URI,\r\n                    Uri.encode(fromAddress));\r\n            projection = new String&#x5B;] { ContactsContract.PhoneLookup.DISPLAY_NAME };\r\n\r\n            \/\/ \u67e5\u8be2\u77ed\u4fe1\u7684\u53d1\u4ef6\u4eba\r\n            Cursor cursor = context.getContentResolver().query(uri, projection,\r\n                    null, null, null);\r\n            if (cursor != null) {\r\n                if (cursor.moveToFirst())\r\n                    fromDisplayName = cursor.getString(0);\r\n\r\n                cursor.close();\r\n            }\r\n            \/\/ \u8df3\u8f6c\u5230\u77ed\u4fe1\u63a5\u6536\u754c\u9762\r\n            Intent di = new Intent();\r\n            di.setClass(context, SmsReceivedActivity.class);\r\n            di.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK\r\n                    | Intent.FLAG_ACTIVITY_SINGLE_TOP);\r\n            di.putExtra(SmsReceivedActivity.SMS_FROM_ADDRESS_EXTRA, fromAddress);\r\n            di.putExtra(SmsReceivedActivity.SMS_FROM_DISPLAY_NAME_EXTRA,\r\n                    fromDisplayName);\r\n            di.putExtra(SmsReceivedActivity.SMS_MESSAGE_EXTRA, message\r\n                    .getMessageBody().toString());\r\n            context.startActivity(di);\r\n        }\r\n    }\r\n}\r\n<\/pre>\n","raw":"","protected":false},"excerpt":{"rendered":"<p>Android\u77ed\u4fe1\u6536\u5230\uff0c\u8bed\u97f3\u64ad\u62a5<\/p>\n","protected":false},"author":1,"featured_media":522,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[88,89],"class_list":["post-382","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-source-code","tag-android","tag-89"],"post_thumbnail_image":"http:\/\/images.jiandaima.com\/blog\/wp-content\/uploads\/2016\/05\/64022-3.png?imageView2\/1\/w\/300\/h\/300#","content_first_image":null,"post_medium_image_300":"http:\/\/images.jiandaima.com\/blog\/wp-content\/uploads\/2016\/05\/64022-3.png?imageView2\/1\/w\/600\/h\/356#","post_thumbnail_image_624":"http:\/\/images.jiandaima.com\/blog\/wp-content\/uploads\/2016\/05\/64022-3.png","post_frist_image":null,"post_medium_image":"http:\/\/images.jiandaima.com\/blog\/wp-content\/uploads\/2016\/05\/64022-3.png?imageView2\/1\/w\/600\/h\/356#","post_large_image":"http:\/\/images.jiandaima.com\/blog\/wp-content\/uploads\/2016\/05\/64022-3.png","post_full_image":"http:\/\/images.jiandaima.com\/blog\/wp-content\/uploads\/2016\/05\/64022-3.png","post_all_images":[],"videoAdId":"","listAd":"0","listAdId":"","listAdEvery":5,"total_comments":0,"category_name":"\u5e94\u7528\u7a0b\u5e8f\u6e90\u7801","post_date":"2016-04-28","like_count":"0","praiseWord":"\u9f13\u52b1","copyright_state":"","excitationAd":"0","rewardedVideoAdId":"","detailAdId":"","detailAd":"0","enterpriseMinapp":"0","audios":[],"postImageUrl":"http:\/\/images.jiandaima.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e44112722964.png","avatarurls":[],"related_posts":[],"pageviews":655,"next_post_id":465,"next_post_title":"TLint for \u864e\u6251\u4f53\u80b2 \u57fa\u4e8eDagger2+RxJava+Retrofit\u5f00\u53d1\uff0c\u91c7\u7528MVP\u6a21\u5f0f--\u6e90\u7801\u5206\u4eab","previous_post_id":261,"previous_post_title":"\u4e00\u6b3e\u6bdb\u73bb\u7483\u6548\u679c\u7684\u89e3\u9501\u754c\u9762\u3002-\u5b89\u5353\u6e90\u7801","_links":{"self":[{"href":"http:\/\/www.jiandaima.com\/blog\/wp-json\/wp\/v2\/posts\/382","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.jiandaima.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.jiandaima.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.jiandaima.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.jiandaima.com\/blog\/wp-json\/wp\/v2\/comments?post=382"}],"version-history":[{"count":0,"href":"http:\/\/www.jiandaima.com\/blog\/wp-json\/wp\/v2\/posts\/382\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.jiandaima.com\/blog\/wp-json\/wp\/v2\/media\/522"}],"wp:attachment":[{"href":"http:\/\/www.jiandaima.com\/blog\/wp-json\/wp\/v2\/media?parent=382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.jiandaima.com\/blog\/wp-json\/wp\/v2\/categories?post=382"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.jiandaima.com\/blog\/wp-json\/wp\/v2\/tags?post=382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}