Basically i'm developing an android app called SMS Scheduler which can send sms in a given time by user.The problem i'm facing is that the app is working fine on android version less than or equal 5.1.1 but suddenly stopped when it tries to send sms on android version grater than or equal 6.0 I don't know what is the exact problem. Please anyone help me.
here is my Android Manifest code
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.humayra.mysmsapplication">
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MyTask"
android:enabled="true"
android:exported="true"
android:process=":remote"
android:excludeFromRecents="true"
>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
</manifest>
Here is my MainActivity code
public class MainActivity extends AppCompatActivity {
private EditText recipient,messagebody;
private Button sendButton,timebtn;
String msg, theNumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recipient = (EditText) findViewById(R.id.recipientTextbox);
messagebody = (EditText) findViewById(R.id.messagebox);
timebtn = (Button) findViewById(R.id.setTimebtn);
}
@Override
public void onResume(){
super.onResume();
registerReceiver(broadcastReceiver, new IntentFilter("mybroadcast"));
}
@Override
public void onPause() {
super.onPause();
registerReceiver(broadcastReceiver, new IntentFilter("mybroadcast"));
}
@Override
public void onDestroy()
{
super.onDestroy();
unregisterReceiver(broadcastReceiver);
}
BroadcastReceiver broadcastReceiver = new MyTask() {
@Override
public void onReceive(Context context, Intent intent) {
sendmsg(theNumber,msg);
}
};
public void setTime(View view){
theNumber=recipient.getText().toString();
msg=messagebody.getText().toString();
final Calendar calender = Calendar.getInstance();
calender.setFirstDayOfWeek(Calendar.SATURDAY);
final int hour = calender.get(Calendar.HOUR);
final int minute = calender.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog;
timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
timebtn.setText(i+":"+i1);
final Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.SATURDAY);
c.set(Calendar.HOUR_OF_DAY, i);
c.set(Calendar.MINUTE, i1);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
long millis = c.getTimeInMillis();
setAlarm(millis);
}
},hour,minute,false);
timePickerDialog.show();
}
private void setAlarm(long timeInMillis) {
AlarmManager alarmManger = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this,MyTask.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0,intent,0);
alarmManger.set(AlarmManager.RTC_WAKEUP,timeInMillis,pendingIntent);
Toast.makeText(this, "SMS Scheduled!!", Toast.LENGTH_SHORT).show();
}
public void sendmsg(String theNumber, String msg) {
String sent = "Message sent!!";
String deliverd = "Message delivered!!";
PendingIntent sentPI = PendingIntent.getBroadcast(MainActivity.this,0,new Intent(sent),0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(MainActivity.this,0,new Intent(deliverd),0);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(MainActivity.this, "SMS sent!!", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(MainActivity.this, "Generic Failure!!", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(MainActivity.this, "No service!!", Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(sent));
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(MainActivity.this, "SMS delivered!!", Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(MainActivity.this, "SMS not delivered!!", Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(deliverd));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(theNumber,null,msg,sentPI,deliveredPI);
}
}
Here is my broadcast class code
public class MyTask extends BroadcastReceiver {
MainActivity main;
@Override
public void onReceive(Context context, Intent intent) {
Intent intent1 = new Intent("mybroadcast");
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.sendBroadcast(intent1);
}
}