I am trying to get incoming messages and print them. With the help of some articles, I have managed to print but with this, I am only managed to get the notification title.
I am new to android development and don't know if is it possible to get an actual message body with accessibityservice.
Manifest :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.domain.accessibilitydemo">
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<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>
<service
android:name=".AccessibilityActivity"
android:enabled="true"
android:exported="true"
android:label="#string/app_name"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="#xml/serviceconfig" />
</service>
</application>
</manifest>
Serviceconfig.xml :
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackAllMask"
android:accessibilityFlags="flagDefault"
android:canRequestEnhancedWebAccessibility="true"
android:notificationTimeout="100"
android:packageNames="#null"
android:canRetrieveWindowContent="true"
android:canRequestTouchExplorationMode="true" />
AccessibiliActivity :
package com.domain.accessibilitydemo;
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.view.accessibility.AccessibilityEvent;
public class AccessibilityActivity extends AccessibilityService {
String txtMessage;
#Override
public void onInterrupt() {
}
#Override
protected void onServiceConnected() {
System.out.println("onServiceConnected");
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
info.notificationTimeout = 100;
info.packageNames = null;
setServiceInfo(info);
}
#Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
//if(event.getEventType() == AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED){
if (event.getPackageName().toString().equals("com.whatsapp")){
StringBuilder message = new StringBuilder();
if (!event.getText().isEmpty()) {
for (CharSequence subText : event.getText()) {
message.append(subText);
}
txtMessage = message.toString();
MainActivity.textMsg.setText(txtMessage);
}
}
}
}
}
OUTPUT :
OUTPUT SCREENSHOT
How can I access the actual message?
and is there any way to store them inside a listview?
Thanks
https://developer.android.com/reference/android/view/accessibility/AccessibilityRecord#getParcelableData()
Different types of event carry different data; For this particular kind you use getParcelableData() to get the notification body.
case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
Notification notification = (Notification) accessibilityEvent.getParcelableData();
if (notification == null) return;
String title = notification.extras.getCharSequence(Notification.EXTRA_TITLE).toString();
String text = notification.extras.getCharSequence(Notification.EXTRA_TEXT).toString();
String text2 = notification.extras.getCharSequence(Notification.EXTRA_BIG_TEXT).toString();
String package_name = accessibilityEvent.getPackageName().toString();
break;
Related
I am working on an Android app (academic purposes) and as part of the app I want to integrate a Keylogger. Following this answer Android Key logger I tried to implement it using AccessibilityService. The code for my class, called Keylogger.java, is the following:
import android.accessibilityservice.AccessibilityService;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
public class Keylogger extends AccessibilityService {
#Override
public void onAccessibilityEvent(AccessibilityEvent event) {
int tipo = event.getEventType();
switch(tipo) {
case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED: {
String data = event.getText().toString();
System.out.println("data: " + data);
break;
}
case AccessibilityEvent.TYPE_VIEW_FOCUSED: {
String data = event.getText().toString();
System.out.println("data: " + data);
break;
}
case AccessibilityEvent.TYPE_VIEW_CLICKED: {
String data = event.getText().toString();
System.out.println("data: " + data);
break;
}
default:
break;
}
}
#Override
public void onInterrupt() {
}
#Override
public void onServiceConnected() {
Log.d("Keylogger", "Starting service");
}
}
The Manifest file looks like this:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.mychat">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
<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>
<activity android:name=".ChatBoxActivity">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".Keylogger"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="#xml/accessibility_service_config" />
</service>
</application>
and finally, the Configuration file for the service:
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:packageNames=""
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagDefault"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true"
android:canRequestFilterKeyEvents="true"
android:settingsActivity="" />
When I install the app on the device it works just fine (that is, I get no errors), and I can manually activate the service going to Settings >> Accessibility. But nothing happens next. I tried everything (launch other applications and type some text) but the prints that I placed on each case will not show up. The app does several things but from my understanding the service should work automatically. What am I missing and how can I get it right?
Thank you in advance.
https://github.com/bshu2/Android-Keylogger
Here's a android accessibility Keylogger I've used before , and works nice
I guess you can compare your application with that Keylogger , you might find your mistake
I have two app - MyApplication and FirstApp. There's is a button in MyApplicaton on click of which I am navigated to FirstApp.
Now, I want to read the contents of FirstApp using AccessibilityService.
My code goes like this for MyApplication-
MainActivity.java
package com.example.abc.myapplication;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button mButton;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this,MyAccessibilityService.class);
startService(intent);
mButton = (Button) findViewById(R.id.click_me);
mButton.setOnClickListener(this);
}
#Override
public void onClick(View v) {
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.example.abc.firstapp");
startActivity(launchIntent);
}
}
MyAccessibilityService.java
package com.example.aayushi.myapplication;
public class MyAccessibilityService extends AccessibilityService {
private AccessibilityServiceInfo info;
#Override
protected void onServiceConnected() {
Log.i("service connected","service");
info = new AccessibilityServiceInfo();
info.eventTypes=AccessibilityEvent.TYPES_ALL_MASK;
info.notificationTimeout=100;
info.feedbackType=AccessibilityEvent.TYPES_ALL_MASK;
info.packageNames = new String[]{"com.example.abc.firstapp"};
setServiceInfo(info);
}
#Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.i("onEvent----","yay");
Log.i("event-----------", event.toString());
//Log.i("source", event.ge)
}
#Override
public void onInterrupt() {
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.abc.myapplication">
<uses-feature android:name="android.hardware.fingerprint"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<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">
<service android:name=".MyAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
>
<meta-data android:name="android.accessibilityservice"
android:resource="#xml/accessibility_config"/>
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
</service>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
accessibility_config.xml
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="#string/accessibility_service_description"
android:packageNames="com.example.abc.myapplication"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagDefault"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true"
android:settingsActivity="com.example.abc.myapplication.MyAccessibilityService" />
The problem is after enabling accessibility on device, onServiceConnected() is not at all getting called.
For testing, I am using Android 8.0.0 , API 26.
It looks like you're trying to start your accessibility service from within your activity. You can't do this. You must start your accessibility service from the accessibility services menu. Settings > General > Accessibility. You also most get rid of the code that attempts to start your service from within your activity.
I followed a tutorial on Receiving sms using BroadcastReceiver
https://www.youtube.com/watch?v=h-zYXVODiPo
I used exactly the same codes. Enabled Telnet client. Does my device need to be rooted first? I don't know the problem. Please help.
Here's my MainActivity
public class MainActivity extends Activity {
BroadcastReceiver receiver;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
receiver = new BroadcastReceiver() {
#Override
public void onReceive(Context arr0, Intent arr1) {
processReceiver(arr0,arr1);
}
};
registerReceiver(receiver,filter);
}
public void onDestroy(){
super.onDestroy();
unregisterReceiver(receiver);
}
public void processReceiver(Context context,Intent intent){
Toast.makeText(context,"RECEIVED",Toast.LENGTH_LONG).show();
TextView lbs = (TextView)findViewById(R.id.textView1);
Bundle bundle = intent.getExtras();
Object[] objArr = (Object[])bundle.get("pdus");
String sms="";
for(int i=0;i>objArr.length;i++){
SmsMessage smsMsg = SmsMessage.createFromPdu((byte[])objArr[i]);
String smsBody = smsMsg.getMessageBody();
String senderNumber = smsMsg.getDisplayOriginatingAddress();
sms+= "From: "+senderNumber+"\nContent: "+smsBody+"\n";
}
lbs.setText(sms);
}
Here's my Manifest.XML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="gavadev.com.smsreceiver">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21"/>
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:supportsRtl="true"
android:theme="#style/AppTheme">
<activity
android:name=".MainActivity"
android:label="#string/app_name"
android:theme="#style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Main2Activity"></activity>
</application>
</manifest>
Use a Broadcast Receiver which will not be unregistered when destroying the activity:
public class MyReceiver extends BroadcastReceiver{
#Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
{
// your processing will go here...
}
}
}
Register the receiver via manifest file as following:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcastreceiverpremier"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name="com.example.broadcastreceiverpremier.MainActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
</application>
I am creating an Android App that is providing a button to the user to refresh the database so that the local data and the data on the server remains in sync.
I have created the Account Authenticator, Content Provider and have bind them through a service. The ContentResolver.requestSync() isnt triggering onPerformSync().
Here is what I have got for the code:
public void refreshButton(View view) {
Log.v("aye", "reached here");
Bundle settings = new Bundle();
settings.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL,true);
settings.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
Account dummyAccount = createDummyAccount(this);
ContentResolver.requestSync(dummyAccount,MyContract.AUTHORITY,settings);
}
private Account createDummyAccount(Context context) {
Account dummyAccount = new Account("dummyaccount","com.example.sid.fetchdata");
AccountManager accountManager = (AccountManager) context.getSystemService(ACCOUNT_SERVICE);
try {
accountManager.addAccountExplicitly(dummyAccount, null, null);
} catch (Exception e) {
e.printStackTrace();
}
ContentResolver.setSyncAutomatically(dummyAccount, MyContract.AUTHORITY, true);
ContentResolver.setIsSyncable(dummyAccount,MyContract.AUTHORITY,1);
return dummyAccount;
}
I am using a dummy account and have created a stub account authenticator according to the Android Developers Guide.
Here's how my SyncAdapter class looks like:
public class MySyncAdapter extends AbstractThreadedSyncAdapter {
private ContentResolver contentResolver;
public MySyncAdapter(Context context,boolean autoInitialize) {
super(context,autoInitialize);
contentResolver = context.getContentResolver();
}
public MySyncAdapter(Context context,boolean autoInitialize,boolean allowParallelSyncs) {
super(context,autoInitialize,allowParallelSyncs);
contentResolver = context.getContentResolver();
}
#Override
public void onPerformSync(Account account,Bundle extras,String authority,ContentProviderClient providerClient,SyncResult syncResult) {
// android.os.Debug.waitForDebugger();
// Log.e("first","Sync Started");
GetData getData = new GetData(getContext());
ContentValues[] questionsContentValues = getData.getAndParseDataContentValues();
try {
Log.d("inside","Inside");
int deletedRows = providerClient.delete(MyContract.CONTENT_URI, null, null);
// int addedRows = contentResolver.bulkInsert(MyContract.CONTENT_URI,questionsContentValues);
// providerClient.insert(MyContract.CONTENT_URI,questionsContentValues[0]);
// Log.v("third1","" + addedRows);
contentResolver.notifyChange(MyContract.CONTENT_URI,null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Here's how my AndroidManfiest.xml is structured:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sid.fetchdata">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:supportsRtl="true"
android:theme="#style/AppTheme">
<service
android:name=".RetrieveService"
android:exported="false" />
<activity
android:name=".FetchActivity"
android:label="#string/app_name"
android:theme="#style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ListActivity"
android:label="#string/title_activity_list"
android:parentActivityName=".FetchActivity"
android:theme="#style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.sid.fetchdata.FetchActivity" />
</activity>
<activity
android:name=".SwipeActivity"
android:label="#string/title_activity_swipe"
android:parentActivityName=".ListActivity"
android:theme="#style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.sid.fetchdata.ListActivity" />
</activity>
<provider
android:name=".MyContentProvider"
android:syncable="true"
android:exported="true"
android:authorities="com.example.sid.fetchdata.provider" />
<service
android:name=".MyService"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator"/>
</intent-filter>
<meta-data
android:name="android.accounts.AccountAuthenticator"
android:resource="#xml/account_authenticator" />
</service>
<service
android:name=".SyncService"
android:process=":sync"
android:exported="true">
<intent-filter>
<action android:name="android.content.SyncAdapter"/>
</intent-filter>
<meta-data
android:name="android.content.SyncAdapter"
android:resource="#xml/my_sync_adapter" />
</service>
</application>
The corresponding classes are, MyService is bound to the MyStubAuthenticator and SyncService is bound to SyncAdapter.
The xml files for MyStubAuthenticaor:
<?xml version="1.0" encoding="utf-8"?>
<account-authenticator
xmlns:android="http://schemas.android.com/apk/res/android"
android:icon="#mipmap/ic_launcher"
android:smallIcon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:accountType="com.example.sid.fetchdata" />
The xml file for SyncAdapter is:
<?xml version="1.0" encoding="utf-8"?>
<sync-adapter
xmlns:android="http://schemas.android.com/apk/res/android"
android:isAlwaysSyncable="true"
android:allowParallelSyncs="false"
android:supportsUploading="false"
android:userVisible="true"
android:accountType="com.example.sid.fetchdata"
android:contentAuthority="com.example.sid.fetchdata.provider" />
The contract class for the Provider is as follows:
public class MyContract {
public static final String AUTHORITY = "com.example.sid.fetchdata.provider";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + QuestionDataBaseHelper.TABLE_QUESTIONS);
public static final int QUESTIONS = 1;
public static final int QUESTIONS_ID = 2;
public static final String SINGLE_RECORD_MIME_TYPE = "vnd.android.cursor.item/vnd.com.example.sid.fetchdata.provider.questions";
public static final String MULTIPLE_RECORDS_MIME_TYPE = "vnd.android.cursor.dir/vnd.com.example.sid.fetchdata.provider.questions";
}
I have checked that the ContentProvider is working by using it on a separate thread. The account is showing up in the Accounts section in the Settings option of the phone. The Syncing is stuck at Syncing Now...
Finally fixed the problem. The problem was with the onPerformSync() function. The function was being triggered by requestSync() but
contentResolver.notifyChange(MyContract.CONTENT_URI,null);
was the problem. The function as given in the Docs tells that the last argument syncToNetwork determines if the changes are synced to the network. Since I wasn't passing it false, an infinite loop was triggered and hence the sync was taking infinite time to complete.
So the correct call would be,
contentResolver.notifyChange(MyContract.CONTENT_URI,null,false);
I am having problems in connecting to a web service I have created.
When I try to call the webservice from my Android Code it doesn't work but when I manually write the request with variables passed in the address bar it works.
Please have a look at the code. I think the problem is with the function that I am calling on pageload, it doesn't work when I call it through Android.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Script.Serialization;
using System.Web;
using System.Data.SqlClient;
using System.Collections;
namespace MyService
{
public partial class Caller : System.Web.UI.Page
{
//public int a, b;
protected void Page_Load(object sender, EventArgs e)
{
this.txtBox1.Text = Request.QueryString["Name"];
this.txtBox2.Text = Request.QueryString["Price"];
if (txtBox1.Text != "" && txtBox2.Text != "")
Add(txtBox1.Text, Convert.ToInt32(txtBox2.Text));
}
public void Add(String name, int price)
{
//this.txtBox1.Text = Request.QueryString["Name"];
//this.txtBox2.Text = Request.QueryString["Price"];
SqlConnection con = new SqlConnection(util.ConnectionString);
con.Open();
String query = "insert into Cart values ('" + name + "',"+ price +");";
SqlCommand cmd = new SqlCommand(query, con);
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
}
}
}
Ok! When I have hosted the website on IIS and type the query in the address bar it works for example 192......../MyAndroid/Caller.aspx?Name=Banana&Price=15
This is working fine but when calling from android its not working.
Here is the android code.
try {
Connectivity c = new Connectivity();
String Name = holder.txtItemName.getText().toString();
int Price = Integer.parseInt((String)holder.txtPrice.getText());
String url="http://192.168.15.2/MyAndroid/Caller.aspx?Name="+Name+"&Price="+Price; //do not use localhost
String response=c.callWebService(url);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
A little help would be appreciated. Thank you!!
Android Manifest file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.quiz.activities"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="#drawable/ic_launcher"
android:label="#string/app_name" >
<activity
android:name=".QuizActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Add"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.Add" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".Get"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.Get" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>