ReturnAsk special permission and listen answer
1: package com.voipplus.mmsclient.activities;
2:
3: import static com.voipplus.mmsclient.BuildConfig.*;
4:
5: import android.Manifest;
6: import android.content.pm.PackageManager;
7: import android.os. ;
8: import android.util.Log;
9: import android.widget.Button;
10:
11: import androidx.activity.EdgeToEdge;
12: import androidx.annotation.NonNull;
13: import androidx.appcompat.app.AppCompatActivity;
14: import androidx.core.app.ActivityCompat;
15: import androidx.core.content.ContextCompat;
16: import androidx.core.graphics.Insets;
17: import androidx.core.view.ViewCompat;
18: import androidx.core.view.WindowInsetsCompat;
19: import androidx.recyclerview.widget.LinearLayoutManager;
20: import androidx.recyclerview.widget.RecyclerView;
21:
22: import com.google.android.material.tabs.TabLayout;
23: import com.voipplus.mmsclient.R;
24: import com.voipplus.mmsclient.WebRTC.WebRTCService;
25: import com.voipplus.mmsclient.httpService.HTTPService;
26: import com.voipplus.mmsclient.mms.MMSType;
27: import com.voipplus.mmsclient.randomData.DataGenerator;
28: import com.voipplus.mmsclient.randomData.RandomMessageItem;
29: import com.voipplus.mmsclient.randomData.RandomMessageItemAdapter;
30: import com.voipplus.mmsclient.serviceLocalStorage.CryptoStorageService;
31: import com.voipplus.mmsclient.serviceLocalStorage.KeyValueService;
32: import com.voipplus.mmsclient.serviceMMS.MMSProcessingService;
33: import com.voipplus.mmsclient.serviceMMS.MMSServiceStarter;
34: import com.voipplus.mmsclient.serviceManager.MyApplication;
35: import com.voipplus.mmsclient.serviceManager.ServiceLocatorReference;
36: import com.voipplus.mmsclient.tabs.TabSwitcher;
37: import com.voipplus.mmsclient.testMMS.MMSTestGenerator;
38:
39: import java.util.List;
40:
41: public class NotificationActivity extends AppCompatActivity {
42: private Button closeButton;
43: private TabLayout tabLayout;
44: private TabSwitcher tabSwitcher;
45: private MMSServiceStarter mmsServiceStarter;
46: private static final String TAG = "NotificationActivity";
47: private static final int REQUEST_SMS_PERMISSIONS = 1001;
48:
49: @Override
50: protected void onCreate( savedInstanceState) {
51: super.onCreate(savedInstanceState);
52: Log.d(TAG, "onCreate: NotificationActivity started");
53:
54: // Get the Application instance
55: MyApplication myApp = (MyApplication) getApplication();
56: // Get the ServiceLocator
57: ServiceLocatorReference serviceLocator = myApp.serviceLocator;
58:
59: // Get the services
60: KeyValueService keyValueService = serviceLocator.getService(KeyValueService.class);
61: CryptoStorageService cryptoStorageService = serviceLocator.getService(CryptoStorageService.class);
62: HTTPService httpService = serviceLocator.getService(HTTPService.class);
63: WebRTCService webRTCService = serviceLocator.getService(WebRTCService.class);
64:
65: // Use the services
66: System.out.println("NotificationActivity: Services references are available");
67: if (keyValueService != null) {
68: String value = keyValueService.get("myKey");
69: Log.d(TAG, "KeyValueService Retrieved value: " + value);
70: } else {
71: Log.e(TAG, "KeyValueService is null!");
72: }
73: if (cryptoStorageService != null) {
74: String value = cryptoStorageService.get("cryptoKey");
75: Log.d(TAG, "CryptoStorageService Retrieved value: " + value);
76: } else {
77: Log.e(TAG, "CryptoStorageService is null!");
78: }
79: if (httpService != null) {
80: // Example usage of HTTPService
81: // You can call httpService.makeRequest() here if needed
82: Log.d(TAG, "HTTPService is available");
83: } else {
84: Log.e(TAG, "HTTPService is null!");
85: }
86:
87: mmsServiceStarter = new MMSServiceStarter(this, new MMSServiceStarter.MMSProcessingServiceConnectionListener() {
88: @Override
89: public void onMMSProcessingServiceConnected(MMSProcessingService service) {
90: MyApplication myApp = (MyApplication) getApplication();
91: myApp.registerServiceInstance(MMSProcessingService.class, service);
92: }
93: });
94:
95: checkAndRequestPermissions();
96:
97: if (GENERATE_TEST_MMS) {
98: MMSTestGenerator.generateTestMMS(this, "111111", MMSType.MIXED_MEDIA_WITH_VIDEO_AND_SOUND);
99: MMSTestGenerator.generateTestMMS(this, "111112", MMSType.TEXT_AND_IMAGE);
100: }
101:
102: setContentView(R.layout.activity_notification);
103: setTitle("VoipPLUS Notification");
104:
105: tabLayout = findViewById(R.id.tabLayout);
106: tabSwitcher = new TabSwitcher(this, tabLayout);
107: tabSwitcher.selectTab(-1);
108: Log.d(TAG, "onCreate: tabSwitcher created");
109:
110: RecyclerView recyclerView = findViewById(R.id.recyclerView);
111: List<RandomMessageItem> randomIitems = DataGenerator.generateRandomData(5);
112: RandomMessageItemAdapter adapter = new RandomMessageItemAdapter(randomIitems);
113: recyclerView.setAdapter(adapter);
114: recyclerView.setLayoutManager(new LinearLayoutManager(this));
115:
116: EdgeToEdge.enable(this);
117: ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
118: Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
119: v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
120: return insets;
121: });
122: }
123:
124: private void checkAndRequestPermissions() {
125: if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED ||
126: ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED ||
127: ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED) {
128: ActivityCompat.requestPermissions(this, new String[]{
129: Manifest.permission.SEND_SMS,
130: Manifest.permission.READ_SMS,
131: Manifest.permission.RECEIVE_SMS
132: }, REQUEST_SMS_PERMISSIONS);
133: } else {
134: startMMSProcessingService();
135: }
136: }
137:
138: @Override
139: public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
140: super.onRequestPermissionsResult(requestCode, permissions, grantResults);
141: if (requestCode == REQUEST_SMS_PERMISSIONS) {
142: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
143: startMMSProcessingService();
144: } else {
145: Log.e(TAG, "SMS permissions denied");
146: // Handle permission denial (e.g., show a message to the user)
147: }
148: }
149: }
150:
151: private void startMMSProcessingService() {
152: mmsServiceStarter.startAndBindService();
153: }
154:
155: @Override
156: protected void onDestroy() {
157: super.onDestroy();
158: // Unbind the MMSProcessingService
159: mmsServiceStarter.unbind();
160: }
161: }
162:
Return
AndroidMosaic context:
- 2025 year: Resolve class conflicts #AndroidMosaic
- 2025 year: Application level parameters in configuration #AndroidMosaic
- 2025 year: Create test with junit and pass or dismiss test before application launch #AndroidMosaic
- 2025 year: Ask special permission and listen answer #AndroidMosaic
- 2025 year: Service lifecycle #AndroidMosaic
- 2025 year: AtomicInteger and accept service callback in UI thread, stop progressBar that was run in UiThread #AndroidMosaic
- 2025 year: Generate random data and pass it to RecyclerView with Adapter #AndroidMosaic
- 2025 year: Pass data to new form with Intent and getParcelableExtra #AndroidMosaic
- 2025 year: Access to Contact list #AndroidMosaic
- 2025 year: Using Query and Cursor to read data sequence and fill DataAdapter for RecyclerView #AndroidMosaic
- 2025 year: Custom TabSwithcer #AndroidMosaic
- 2025 year: Custom Dropdownlist with default value based on Spinner #AndroidMosaic
- 2025 year: Create MMS service and route MMS to Emulator #AndroidMosaic
- 2025 year: Vector drawable - fastest way to create icons #AndroidMosaic
- 2025 year: Technique to create Button with own rectangle shape #AndroidMosaic
- 2025 year: Simple HTTP service #AndroidMosaic
- 2025 year: Simple key-value service with Local Storage #AndroidMosaic
- 2025 year: Cryptographic local storage key-value service #AndroidMosaic
- 2025 year: WebRTC service #AndroidMosaic
- 2025 year: SIP service #AndroidMosaic
- 2025 year: Global objects with references to all application services #AndroidMosaic
Comments (
)

Link to this page:
http://www.vb-net.com/AndroidMosaic/Index04.htm
|