サービス初級:Activityとサービス間の連絡、サービス接続の書き換え
MainActivity:
MyService:
注意:サービス属性 android:enabled
このプロパティは、サービスがインスタンス化できるかどうかを示すために使用されます.trueに設定すると、インスタンス化できます.そうしないと、インスタンス化できません.デフォルトはtrueです.
<アプリケーション>要素には独自のenabledプロパティがあり、サービスコンポーネントを含むアプリケーション内のすべてのコンポーネントに適用されます.有効なサービスの場合、<アプリケーション>要素と要素のenabledプロパティはtrue(デフォルトはtrue)でなければなりません.エレメントのenabledプロパティがfalseに設定されている場合、サービスはインスタンス化されずに無効になります.
android:exported
このプロパティは、サービスが他のアプリケーションコンポーネントによって呼び出されたり、インタラクティブになったりできるかどうかを示すために使用されます.trueに設定すると、呼び出されたりインタラクティブになったりできます.そうしないとできません.falseに設定すると、同じアプリケーションのコンポーネントまたは同じユーザーIDを持つアプリケーションのみがサービスを開始またはバインドできます.
デフォルト値は、サービスに含まれるフィルタに依存します.フィルタがないと、サービスは明確なクラス名を指定することによってのみ呼び出されます.つまり、サービスはアプリケーションの内部でのみ使用できます(他の外部ユーザーはサービスのクラス名を知らないため).この場合、この属性のデフォルト値はfalseです.一方、少なくとも1つのフィルタが含まれている場合、サービスは外部の他のアプリケーションにサービスを提供できることを意味し、デフォルト値はtrueである.
このプロパティは、サービスを他のアプリケーションに暴露することを制限する唯一の方法ではありません.また、権限を使用して、サービスと対話できる外部エンティティを制限することもできます.
本文は“空は痕跡がありませんが私は飛んだことがあります”のブログから出て、転載して作者と連絡してください!
public class MainActivity extends Activity
{
Mybinder mybinder =null;
ServiceConnection mConn = new ServiceConnection()
{
@Override
public void onServiceDisconnected(ComponentName name)
{
}
@Override
public void onServiceConnected(ComponentName name, IBinder binder)
{
mybinder = (Mybinder) binder;// binder, Mybinder
Log.e("MainActivity", "mybinder.getname()");
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textView1 = (TextView) findViewById(R.id.textView1);
final TextView textView2 = (TextView) findViewById(R.id.textView2);
findViewById(R.id.button1).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(MainActivity.this,MyService.class);
bindService(intent, mConn, BIND_AUTO_CREATE);
}
});
findViewById(R.id.button2).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
unbindService(mConn);
}
});
findViewById(R.id.button3).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
textView1.setText(mybinder.play());// mybinder service , service
}
});
findViewById(R.id.button4).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
textView2.setText(mybinder.pause());
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
MyService:
public class MyService extends Service
{
public String play()
{
return " ";
}
public String pause()
{
return " ";
}
class Mybinder extends Binder//Binder IBinder,Mybinder Binder
{
// Mybinder
public String getname()
{
return "myBinder";
}
//
public String play()
{
return MyService.this.play();
}
public String pause()
{
return MyService.this.pause();
}
}
private IBinder binder = new Mybinder();//IBinder Mybinder
@Override
public IBinder onBind(Intent intent)
{
Log.e("MyService", "onBind");
return binder;// IBinder
}
@Override
public void onCreate()
{
Log.e("MyService", "onBind");
super.onCreate();
}
@Override
public boolean onUnbind(Intent intent)
{
Log.e("MyService", "onUnbind");
return super.onUnbind(intent);
}
@Override
public void onDestroy()
{
Log.e("MyService", "onDestroy");
super.onDestroy();
}
}
注意:
このプロパティは、サービスがインスタンス化できるかどうかを示すために使用されます.trueに設定すると、インスタンス化できます.そうしないと、インスタンス化できません.デフォルトはtrueです.
<アプリケーション>要素には独自のenabledプロパティがあり、サービスコンポーネントを含むアプリケーション内のすべてのコンポーネントに適用されます.有効なサービスの場合、<アプリケーション>要素と
android:exported
このプロパティは、サービスが他のアプリケーションコンポーネントによって呼び出されたり、インタラクティブになったりできるかどうかを示すために使用されます.trueに設定すると、呼び出されたりインタラクティブになったりできます.そうしないとできません.falseに設定すると、同じアプリケーションのコンポーネントまたは同じユーザーIDを持つアプリケーションのみがサービスを開始またはバインドできます.
デフォルト値は、サービスに含まれるフィルタに依存します.フィルタがないと、サービスは明確なクラス名を指定することによってのみ呼び出されます.つまり、サービスはアプリケーションの内部でのみ使用できます(他の外部ユーザーはサービスのクラス名を知らないため).この場合、この属性のデフォルト値はfalseです.一方、少なくとも1つのフィルタが含まれている場合、サービスは外部の他のアプリケーションにサービスを提供できることを意味し、デフォルト値はtrueである.
このプロパティは、サービスを他のアプリケーションに暴露することを制限する唯一の方法ではありません.また、権限を使用して、サービスと対話できる外部エンティティを制限することもできます.
本文は“空は痕跡がありませんが私は飛んだことがあります”のブログから出て、転載して作者と連絡してください!