PDA

View Full Version : مشکل با abortBroadcast()



mnakhaeipoor
جمعه 11 اردیبهشت 1394, 11:45 صبح
سلام عرض شد خدمت دوستان
خدمت شما عرض شود که من میخوام وقتی SMS دریافت میشه کاربر متوجه نشه و به جای نرم افزار صندوق دریافت پیش فرض اندروید پیام ها به نرم افزار من منتقل بشن:شیطان:
همه چیز درست کار میکنه و SMS هم به درستی دریافت میشه اما تنها مشکلی که این وسط هست اینه که متد abortBroadcast() جلوی مطلع شدن کاربر از دریافت SMS توسط سسیتم رو نمیگیره!
کل Stack Overflow رو زیر و رو کردم اما راه حلی پیدا نکردم:گریه:
کسی از دوستان میتونه به داد من برسه؟:ناراحت:
5 روزه که گیر همین مسئله ام:عصبانی++::عصبانی++:
کد Manifest :


<receiver
android:name=".smsReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter android:priority="99999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>


کد برادکست رسیور :


public class smsReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"));{
Bundle extras = intent.getExtras();
if(extras != null){
Object[] pdus = (Object[]) extras.get("pdus");
if(pdus.length < 1) return;
String sms = "";
for(int i=0;i<pdus.length;i++){
SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]);
String sender = message.getOriginatingAddress().toString();
abortBroadcast();
String smsBody = message.getMessageBody().toString();
sms = sender + ":" + smsBody;
Intent sendSmsToMain = new Intent("SMS_RECEIVED_ACTION");
sendSmsToMain.putExtra("sms", sms);
context.sendBroadcast(sendSmsToMain);
}
}
}
}

}


با تشکر:چشمک:

dalmif
جمعه 11 اردیبهشت 1394, 12:20 عصر
با سلام دوست عزیز.
فکر میکنم که جاش رو بد گذاشتی شما for رو اینشکلی بنویس:


for (int i = 0; i < pdus.length; i++) {
message = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (sender == null) sender = message.getOriginatingAddress();
text = message.getMessageBody();
if (text != null) sb.append(text);



}

بعد بیا پایین یعنی خارج از for یه شرط بزار که اگه مثلا شمارش فلان بود یا مثلا اگه sender مساوی با null نبود عملیات رو انجام بده و در آخر اون کد رو یعنی abortBroadcast(); رو بزار.
تموم شد داداش :لبخند:

mnakhaeipoor
جمعه 11 اردیبهشت 1394, 12:36 عصر
با سلام دوست عزیز.
فکر میکنم که جاش رو بد گذاشتی شما for رو اینشکلی بنویس:


for (int i = 0; i < pdus.length; i++) {
message = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (sender == null) sender = message.getOriginatingAddress();
text = message.getMessageBody();
if (text != null) sb.append(text);



}

بعد بیا پایین یعنی خارج از for یه شرط بزار که اگه مثلا شمارش فلان بود یا مثلا اگه sender مساوی با null نبود عملیات رو انجام بده و در آخر اون کد رو یعنی abortBroadcast(); رو بزار.
تموم شد داداش :لبخند:
سلام
نه بابا به هیچ صراطی مستقیم نمیشه
هرجا abortBroadcast رو میذارم هیچ فرقی نمیکنه

dalmif
جمعه 11 اردیبهشت 1394, 12:51 عصر
میتونی پیام رو بخونی؟؟؟
شاید دسترسی خوندن پیام رو نداده باشی؟؟؟
کل منیفست رو کپی کن اینجا

mnakhaeipoor
جمعه 11 اردیبهشت 1394, 22:26 عصر
میتونی پیام رو بخونی؟؟؟
شاید دسترسی خوندن پیام رو نداده باشی؟؟؟
کل منیفست رو کپی کن اینجا

چرا پیام که با موفقیت دریافت میشه و توی Toast نشونش میدم
Manifest :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.project.appName"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="12"
android:targetSdkVersion="18" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.RAISED_THREAD_PRIORITY"/>

<application
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="the app label"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="the app label" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".PlayActivity"
android:label="settings" >
</activity>
<activity
android:name=".InfActivity"
android:label="inf" >
</activity>
<receiver
android:name=".smsReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter android:priority="99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>

</manifest>

mnakhaeipoor
شنبه 12 اردیبهشت 1394, 10:11 صبح
برای ممناعت از دریافت SMS توسط سیستم راه دیگه ای به غیر از استفاده از abortBroadcast() وجود نداره؟؟

dalmif
شنبه 12 اردیبهشت 1394, 13:04 عصر
این درسته من خودمم از همین استفاده می کنم و کار هم مبکنه. درست و عالی.

mnakhaeipoor
شنبه 12 اردیبهشت 1394, 14:18 عصر
این درسته من خودمم از همین استفاده می کنم و کار هم مبکنه. درست و عالی.

ای بابا
مگه یکی ما خار داره که روش کار نمیکنه:متفکر:

atpf67
شنبه 12 اردیبهشت 1394, 16:03 عصر
ای بابا
مگه یکی ما خار داره که روش کار نمیکنه:متفکر:


سلام بزرگوار

توی اندروید از نسخه 4.4 به بالا بلاک کردن SMS امکان پذیر نیست و من حدسم اینه که شما داری برنامه روی نسخه 4.4 و یا بالاتر تست می کنید.

موفق و پیروز باشید- یا علی

mnakhaeipoor
دوشنبه 14 اردیبهشت 1394, 11:22 صبح
سلام بزرگوار

توی اندروید از نسخه 4.4 به بالا بلاک کردن SMS امکان پذیر نیست و من حدسم اینه که شما داری برنامه روی نسخه 4.4 و یا بالاتر تست می کنید.

موفق و پیروز باشید- یا علی
سلام
نه من روی 4.1 و 4.3 تست کردمش کار نکرد
اما الان فهمیدم مشکل از اینه که یه نرم افزار هایی مثل GoSms میان و با تنظیم pririty با لاتر broadcast رو زود تر از ما دریافت میکنن!
راهی هست بشه بر این مشکل غلبه کرد؟؟

dalmif
دوشنبه 14 اردیبهشت 1394, 12:51 عصر
سلام دوست عزیز
نه من خیلی سرچ کردم که چجوری بالاتر از گو اس ام اس باشم ولی نشد.
من میدونستم که این مشکل هستش ولی شما گفتی پیام رو دریافت می کنم و نشون میدم اما واسه من اگه گو اس ام اس نصب باشه حتی پیام رو هم نشون نمیده.:لبخند:

mnakhaeipoor
دوشنبه 14 اردیبهشت 1394, 13:05 عصر
سلام دوست عزیز
نه من خیلی سرچ کردم که چجوری بالاتر از گو اس ام اس باشم ولی نشد.
من میدونستم که این مشکل هستش ولی شما گفتی پیام رو دریافت می کنم و نشون میدم اما واسه من اگه گو اس ام اس نصب باشه حتی پیام رو هم نشون نمیده.:لبخند:
عجب!
کار نشد نداره
حتما یه راهی پیدا میشه
ممنون دوست عزیز

atpf67
دوشنبه 14 اردیبهشت 1394, 14:14 عصر
سلام
نه من روی 4.1 و 4.3 تست کردمش کار نکرد
اما الان فهمیدم مشکل از اینه که یه نرم افزار هایی مثل GoSms میان و با تنظیم pririty با لاتر broadcast رو زود تر از ما دریافت میکنن!
راهی هست بشه بر این مشکل غلبه کرد؟؟

سلام

من تست نکردم اما اصولاً برای اینکه زودتر از GoSMS بخواید دریافت کنید باید priority رو کمتر اون مقداری که این در این نرم افزار تعیین شده در نظر بگیرید،(معادل کلمه ی priority در فارسی میشه اولویت) با این حساب برای اینکه شما بتونید BroadCast رو زودتر از نرم افزارهای دیگه دریافت کنید باید مقدار این خاصیت رو کم کنید، در واقع وقتی برنامه شما مقدار 999 رو به این خاصیت میده و یه برنامه دیگه 998 رو میده به این معنیه که اون برنامه ای که رو 998 تنظیم شده برای دریافت BroadCast نسبت به برنامه ی شما در اولویت نزدیک تری قرار گرفته!

البته جایی خوندم و یا شایدم شنیدم که این مقدار رو نباید زیاد کمش کرد چون به گوشی آسیب می زنه! به این نکته حتماً توجه کنید و در موردش تحقیق کنید!

امیدوارم با این توضیحات مشکلتون حل بشه.

پیروز و سربلند باشید- یا علی

hamedg1366
دوشنبه 14 اردیبهشت 1394, 16:37 عصر
سلام

من تست نکردم اما اصولاً برای اینکه زودتر از GoSMS بخواید دریافت کنید باید priority رو کمتر اون مقداری که این در این نرم افزار تعیین شده در نظر بگیرید،(معادل کلمه ی priority در فارسی میشه اولویت) با این حساب برای اینکه شما بتونید BroadCast رو زودتر از نرم افزارهای دیگه دریافت کنید باید مقدار این خاصیت رو کم کنید، در واقع وقتی برنامه شما مقدار 999 رو به این خاصیت میده و یه برنامه دیگه 998 رو میده به این معنیه که اون برنامه ای که رو 998 تنظیم شده برای دریافت BroadCast نسبت به برنامه ی شما در اولویت نزدیک تری قرار گرفته!

البته جایی خوندم و یا شایدم شنیدم که این مقدار رو نباید زیاد کمش کرد چون به گوشی آسیب می زنه! به این نکته حتماً توجه کنید و در موردش تحقیق کنید!

امیدوارم با این توضیحات مشکلتون حل بشه.

پیروز و سربلند باشید- یا علی



!


من دقیقا برعکس گفته های شما رو خوندم !!!

یعنی اولویت خود برنامه اندروید 1 هستش برای دریافت sms و هر چه این مقدار بیشتر بشه دریافت sms زودتر انجام میگیره ، مثلا ما برای اینکه توی برنامه زودتر sms رو دریافت کنیم باید مقدار 2 رو بدیم به priority

atpf67
دوشنبه 14 اردیبهشت 1394, 17:59 عصر
سلام بزرگوار

شما درست می فرمائید. بنده بخاطر اینکه خیلی وقت قبل روی این مبحث داشتم کار می کردم و الان بدون مراجعه جواب دادم مرتکب اشتباه شدم. الان که به مستندات گوگل مراجعه کردم متوجه اشتباه خودم و صحت گفته ی شما شدم.:متفکر:
عذر می خوام ازتون.

این هم متن گوگل: (http://developer-android.ir/guide/topics/manifest/intent-filter-element.html)

.The value must be an integer, such as "100". Higher numbers have a higher priority. The default value is 0. The value must be greater than -1000 and less than 1000*


*مقدار باید یک عدد صحیح باشه، مانند "100". عدد بزرگتر اولویت بالا تری دارد. مقدار پیشفرض 0 هست. مقدار باید از 1000- بزرگتر و کوچکتر از 1000 باشد.

دوست من، متشکرم که یادآوری کردید اشتباهم رو.:تشویق:

یا علی

mnakhaeipoor
سه شنبه 15 اردیبهشت 1394, 07:26 صبح
پس من این وسط چکار کنم ؟؟ :گریه: :گریه: :گریه: :گریه::گریه::گریه::گریه::گریه: :گریه::گریه: