PDA

View Full Version : مشکل عدم دسترسی برای تغییر حالت Airplan Mode



reza_devel0per
پنج شنبه 25 تیر 1394, 22:54 عصر
با سلام خدمت دوستان
با جستجو ، کدها و دستورات زیر رو برای تغییر حالت پرواز بدست آوردم :

Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try
{
Settings.System.putInt(getContentResolver(),Settin gs.System.AIRPLANE_MODE_ON,1);
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", true);
sendBroadcast(intent);
}
catch (Exception ex)
{
Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show();
}
}
});


و در فایل Manifest.xml هم این خط رو اضافه کردم :
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

اما در حالت اجرا با خطای زیر مواجه می شم :
Permission Denial: not allowed to send broadcast android.intent.action.AIRPLANE_MODE from pid=2524, uid=10061

کسی از دوستان هست که توضیحی در خصوص Broadcast و چگونگی اجازه دسترسی بهش بده؟
یا اگر لطف کنید و بگید راه حل مشکل من چیه که ممنونتون میشم.
مرسی...

reza_devel0per
جمعه 26 تیر 1394, 12:48 عصر
وقتی قسمت intent در کد بالا رو به صورت زیر تغییر میدم، اون اررور بالا رفع میشه :

Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", true);
intent.setAction("com.reza.airplanemodesample");
sendBroadcast(intent);

لازم به ذکره که com.reza.airplanemodesample نام package برنامه هستش.
اما برنامه کار نمیکنه؛ یعنی نمیره به حالت پرواز.
دوستان لطفاً یه راهنمایی بفرمایید

storm_saeed
شنبه 27 تیر 1394, 00:35 صبح
دیگه تو ورژن های ۴.۲ به بعد نمیشه air plane mode و یه سری از چیزهای دیگرو تغییر داد اینا پرمیشن WRITE_SECURE_SETTINGS رو نیاز دارن که اپ های معمولی به این پرمیشن دسترسی ندارن ( فقط اپ های دیفالت گوشی مثل پلی استور اینا این پرمیشن رو دارن) بخاطر همین تنها راحتون اینه که یوزر رو به صفحه تنظیمات airplanemode هدایت کنید به اینصورت :



Intent intent = new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);

با این کد هم میتونید بفهمید که air plane روشنه یا نه


if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
return Settings.System.getInt(mContext.getContentResolver (),Settings.System.AIRPLANE_MODE_ON, 0) != 0;
} else
{return Settings.Global.getInt(mContext.getContentResolver (),Settings.Global.AIRPLANE_MODE_ON, 0) != 0
;}

reza_devel0per
شنبه 27 تیر 1394, 01:33 صبح
راهی نیست برنامه رو به system app تبدیل کنیم؟ :ناراحت:

storm_saeed
شنبه 27 تیر 1394, 03:21 صبح
تنها راهش اینه یه رام اختصاصی بنویسید

reza_devel0per
شنبه 27 تیر 1394, 16:30 عصر
یه راه حل دیگه هم داشت که غیر فعال کردن سیم کارت ها بود و با کد زیر این مشکل رو رفع کردم :

Settings.System.putInt(context.getContentResolver( ), "dual_sim_mode_setting", 0);
Intent localIntent = new Intent("android.intent.action.DUAL_SIM_MODE");
localIntent.putExtra("mode", 0);
context.sendBroadcast(localIntent);


در حال حاضر تنها مسئله ای که باقی میمونه اینه که ، کد بالا برای گوشی های دو سیم کارتست، چطوری می تونم روی گوشی های تک سیم کارته این کار رو انجام بدم؟
ممنون....